Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#26 Re: Laravel 4 » Связи » 13.11.2014 13:44:39

SMGladkovskiy пишет:

Тогда проверяйте, как у Вас всё прописано в модели. Ну и ошибки покажите. А то никак не удаётся отрастить телепатические интерфейсы...

Ну в модели,как на первом посте нечего лишнего,только связи и все. В общем поставил дебагер

ошибка Undefined property: Illuminate\Database\Eloquent\Collection::$id

Код

$posts = Post::with('comment')->get();
	   foreach($posts as $post) {
			echo $post->comment->id;

#27 Re: Laravel 4 » Связи » 13.11.2014 13:03:55

SMGladkovskiy пишет:

Блин, так вопрос был - показать только данные коммента? Так в третьем сообщении у Вас и выводятся данные коммента. То,  что они в json форматируются, так это от того, что коллекцию к строке приводите. Выведите нормально:

echo $post->comment->id;
echo $post->comment->comment;
echo $post->comment->post_id;

Через пост вытащит данные комента.

Делал я так

echo $post->comment->id;
echo $post->comment->comment;
echo $post->comment->post_id;

так не работает,ошибка. Даже стройный дебагер нету neutral

#28 Re: Laravel 4 » Связи » 13.11.2014 12:28:40

SMGladkovskiy пишет:

Eager loading: пользуйте with('comments')

Сделал так

$posts = Post::with('comment')->get();
	   foreach($posts as $post) {
	 echo $post->comment;
       }

вернул

[{"id":2,"comment":"comment","posts_id":1}][{"id":3,"comment":"comment post 2","posts_id":2}]

как мне вернуть только данные комента id итд? только не в таком виде как json. Как сделать такой запрос с одним записем например? find($id) итп

с кодом покажи плз)

#29 Laravel 4 » Связи » 13.11.2014 08:13:28

Nelzz
Ответов: 22

Есть два моделя

Class Post extends Eloquent {

     public function comment()
     {
          
         return $this->hasMany('Comment','posts_id');    
     }

и

Class Comment extends Eloquent {

      public function post()
    {
        return $this->belongsTo('Post','posts_id');
    }

делаю так

$comment = Comment::all();

	   foreach($comment as $com) {
	    echo $com->post->title;
		
		}

через comment работает.

Как через модель post получить данные из comment? Делаю так

   $posts = Post::all();
	  
	   foreach($posts as $post) {
	 echo $post->comment->id;
       }

Так не работает,в чем дело?

#30 Re: Laravel 4 » Eav » 12.11.2014 12:21:23

SMGladkovskiy пишет:

Вот и я о том же - нужно искать решение по задаче. Оно вообще может быть простым, если реализовать тот минимум, что необходим и своими руками... wink

аха своими руками) Я ларой 1месяц 15дней работаю smile до этого на yii писал там с этим не трудно,все есть в инете.

С ларой все трудней. Тепер я понимаю этого чувака) http://www.yiiframework.com/forum/index … _p__226619

#31 Re: Laravel 4 » Eav » 12.11.2014 11:19:28

Самое больное место это ref_id (внешний ключ, ссылающийся на задачу итд) мне тоже уже начался не нравиться этот паттерн.

тут например product_id идет  только на товар http://www.elisdn.ru/blog/31/dinamiches … -eav-v-yii

в нашем случае в месте product_id должен быть разные ид задач и контакта. Он подходит для ИМ итп. По моему надо вообще искать другой паттерн и подумать smile

#32 Re: Laravel 4 » Eav » 12.11.2014 09:38:45

SMGladkovskiy пишет:

Ну, судя по всему, Вы всё правильно расписали. Вам интересно, как из этого сделать форму для заполнения свойств, отображать данные, формировать фильтр или ещё что? Какая именно проблема у Вас?

Если речь идёт о форме, то возьмите плагинчик типа select2 и сделайте typeahead поиск по свойствам + создание нового свойства, если не найдено. Тип поля - сделайте простой select для выбора значений (можно сделать и chain select на поле выбора названия свойства от типа). Значение свойства вводите в инпут, связанный с этим инпутом. Такую связку (поле выбора типа, ввода названия свойства + его значения) сделайте паттерном, который будет добавляться по нажатию кнопочки "добавить свойство". В итоге, когда происходит сохранение, то пробегаетесь по всем свойствам, сохраняете их и связываете с редактируемым объектом.

Когда отображаете данные, то ищите объект и загружаете его свойства - тут всё просто: пользуйте with(''). Тип поля у вас уже зафиксирован - можно использовать его, если требуется.

С фильтром тоже всё относительно просто: выводите все возможные связки свойств и значений. Тип поля для формирования фильтра у вас имеется...

Задача, на самом деле, для всякого рода e-commerce рядовая (как для формирвоании данных, так и для их хранения). Какого-то механизма для реализации всего этого из коробки можно поискать, но мне кажется разве что в разрозненном виде всё - придётся всё равно собирать. А раз так, то, как мне кажется, полезней будет собрать самому: будет понятней, как оно работает и проще будет поддерживать...

Не какой фильтр select2 не нужен

Вы не много,не правильно поняли. Посмотрите http://demo.cartalyst.com/attributes/ Атрибуты отображаеться в пациентах. Так вот при добавление пациента он же показывает все атрибуты c типами, как мне теперь сохранить все атрибуты в пациентах который я добавил?

Мне нужен точно как тут http://demo.cartalyst.com/attributes/

Давай сделаем двоем,точно такое и закинем в гит? опенсоурс будет smile

#33 Re: Laravel 4 » Eav » 12.11.2014 07:55:24

SMGladkovskiy пишет:

Создаёте все нужные модели, прописываете в них отношения друг с другом, строите нужные запросы. Рядовая задача. smile

Или в чём-то конкретном вопрос?

Связи с ним все понятно. Этих же полей нужно еще показать как инпут, как выпадающий список итд,тип храниться в type, и как перехватит такие посты. Добавить итд. По этому подробнее.

Структура таблицы пока такой.

tbl_attribute:

id (первичный ключ)
name (название поля)
type (тип значения: text, checkbox, ...)

tbl_attribute_value:

id (первичный ключ)
ref_id (внешний ключ, ссылающийся на задачу итд)
attribute_id (внешний ключ, ссылающийся на описание атрибута tbl_attribute) 
value (значение)

где ref_id будет ID контакта и задач итд (то есть разные ид) как он по ид будет знать что это ид контакта и задач?

Не думаю что это рядовая задача  smile

#34 Laravel 4 » Eav » 11.11.2014 12:11:06

Nelzz
Ответов: 8

Всем привет, хочу сделать eav модель. как можно реализовать? я имею проектирование,кто-то делал на этом фреймворке?

типа такое http://www.elisdn.ru/blog/31/dinamiches … -eav-v-yii

#35 Re: Laravel 4 » Запрос » 07.11.2014 09:49:19

SMGladkovskiy пишет:

DB:raw() используют для работы с выражениями.

$datefilter = DB::select("SELECT * FROM `contacts` WHERE ".DB::raw('DATE(`created_at`)')." BETWEEN ? AND ?", array('2013-01-08', '2014-12-10'));

Мануал

Спасибо,получился. Пойду ка я лучше изучать документацию.

#36 Re: Laravel 4 » Запрос » 07.11.2014 09:07:01

SMGladkovskiy пишет:
$contacts = Contacts::whereBetween('created_at', ['2013-01-08', '2014-12-10']);

Мануал

я знаком с этим функ.

как мне сделать запрос в таком виде?

SELECT * FROM `contacts` WHERE DATE(`created_at`) BETWEEN '2013-01-08' AND '2014-12-10'

делаю так не работает.

$datefilter = DB::raw("
SELECT * FROM `contacts` WHERE DATE(`created_at`) BETWEEN ':startDate' AND ':endDate'", array(
            'startDate' => '2013-01-08',
            'endDate' => '2014-12-10',
        ));

#37 Laravel 4 » Запрос » 06.11.2014 13:45:41

Nelzz
Ответов: 5

Всем привет. Как сделать запрос в таком виде?

SELECT * FROM contacts
  WHERE created_at BETWEEN STR_TO_DATE('2013-01-08', '%Y-%m-%d') 
  AND STR_TO_DATE('2014-12-10', '%Y-%m-%d'); 

#39 Laravel 4 » autocomplete и jquery » 15.10.2014 12:11:59

Nelzz
Ответов: 1

Всем привет,хочу сделать  autocomplete как на видео http://www.youtube.com/watch?v=pLBtduvx5b0
1:54 минуте у него уже все работает.
делаю так

Route

Route::get('autocomplete',function() {

       return View::make('dashboard.contacts.test');

    });

    Route::get('getdata',function(){

        $term = Input::get('term');

        $data = [
            'R' => 'Red',
            'O' => 'Orange',
            'Y' => 'Yellow',
            'G' => 'Green'

        ];

        $result = [];

        foreach($data as $color) {
            if(strpos(Str::lower($color),$term) !== false) {
                $result[] = ['value' => $color];
            }
        }

        return Response::json($result);

    });

View

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>jQuery UI Autocomplete - Default functionality</title>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.1/jquery-ui.js"></script>
    {{ HTML::style('assets/css/bootstrap.min.css') }}

</head>
<body>

<div class="container">
    <h2>test</h2>


    {{ Form::open(array('url' => '', 'files'=> true)) }}

    <div class="form-group">
        <label for="">Find a color</label>
        <input type="text" class="form-control input-sm" name="auto" id="auto">
    </div>

    <div class="form-group">
        <label for="">Response</label>
        <input type="text" class="form-control input-sm" name="response" id="response" disabled>
    </div>

    {{Form::close()}}

    <script>
        $('#auto').autocomplete({

            source: 'getdata',
            minLength: 1,
            select:function(e,ui){
                console.log("Selected");
            }

        });
    </script>

</body>
</html>

и не работает. Менял так

  $(function() {
            $("#auto").autocomplete({
                source: "getdata",
                minLength: 1,
                select: function( event, ui ) {
                    $('#response').val(ui.item.id);
                }
            });
        });

все равно не работает. Так вчем дело? Менял ссылку js итд.

#40 Re: Laravel 4 » Не могу создать фасад » 10.10.2014 21:50:16

SMGladkovskiy пишет:

Если у Вас в отдельной папке всё лежит в app, насколько я понимаю, то подключите её через psr-0/4 в composer.json:

"autoload": {
	...
	"psr-4": {
		"Example\\": "app/Example"
	},
	...
},
...

Дальше, правильно установив namespace в файлах, Вы позволите компоузеру заавтолоадить всё, что в Example и провайдер найдётся...

у меня такая фишка же было при создании пакета http://laravel.ru/docs/v4/packages

там тоже надо прописывать workbench?

#41 Re: Laravel 4 » Не могу создать фасад » 10.10.2014 18:46:01

Wide пишет:

В config/app.php сервис подключен?

Да.  Ошибка именно когда прописал провайдеры.

#42 Re: Laravel 4 » Не могу создать фасад » 10.10.2014 16:03:53

SMGladkovskiy пишет:

А что у Вас в компоузере прописано для автозагрузки всего этого?

ну как-то так.

{
	"name": "laravel/laravel",
	"description": "The Laravel Framework.",
	"keywords": ["framework", "laravel"],
	"license": "MIT",
	"require": {
		"laravel/framework": "4.2.*",
		"way/generators": "1.*",
        "barryvdh/laravel-ide-helper": "1.*",
        "barryvdh/laravel-debugbar": "1.*",
        "codeception/codeception": "*"
	},
	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/controllers/admin",
			"app/controllers/dashboard",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php"
		]
	},
	"scripts": {
		"post-install-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan ide-helper:generate",
            "php artisan debugbar:publish",
            "php artisan optimize"
		],
		"post-create-project-cmd": [
			"php artisan key:generate"
		]
	},
	"config": {
		"preferred-install": "dist"
	},
	"minimum-stability": "stable"
}

#43 Laravel 4 » Не могу создать фасад » 10.10.2014 15:16:35

Nelzz
Ответов: 7

Хочу создать фасад точно как на http://laravel.ru/articles/odd_bod/crea … in-laravel

получаю ошибку Class 'Fideloper\Example\ExampleServiceProvider' not found

структура папок у меня такой.

b0064491153f.png

делал composer dump-autoload и composer update безрезультатно.

так в чем проблема?

#45 Laravel 4 » Запрос where » 01.10.2014 12:38:18

Nelzz
Ответов: 2

Всем привет.

Есть такой экшен для редактирование. Хочу чтоб id вернул where, если условия нету вернул ошибку,точнее пользователь может редактировать только свой пост итп.

Делаю так.
Company::with('creator_id', '=', User::getAuthUserId())->get()->find($id);
и типа так делал User::find($id)->where('category', '=', 'Eloquent')->get();

ошибка

         public function edit($id)
	{
		 $company = $this->company->find($id);
		if (is_null($company))
		{
			return Redirect::route('companies.index');
		}

		return View::make('companies.edit', compact('company'));
	}

как тут быть?

#46 Laravel 4 » Не работает модуль » 29.09.2014 09:02:58

Nelzz
Ответов: 1

Не могу создать модуль https://github.com/creolab/laravel-modules

получаю ошибку Class App\Modules\Contacts\Controllers\ContactsController does not exist

где ошибка? не могу понять.

сам модуль  http://rghost.ru/58259312

Подвал раздела