Имеется две таблицы: Users: Код (PHP): $table->increments('id'); $table->string('surname'); $table->string('name'); $table->string('middlename'); $table->string('email')->unique(); $table->string('password', 60); $table->rememberToken(); $table->timestamps(); Posts: Код (PHP): $table->increments('id'); $table->string('title'); $table->text('description'); $table->text('content'); $table->text('user_id'); $table->timestamps(); И два класса User, Post. Так вот я уже устал читать документации, не понимаю какие методы для этого нужны, эсепшены вылетают, только от них не кокого толка. Ребят помогите написать два метода для установки зависимости, к одному пользователю должно относиться несколько записей.
ErrorException in 0373811c97699a76e12273b84b2a73ebfd9577d5.php line 17: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name (View: D:\OpenServer\domains\laravel\resources\views\post.blade.php) ErrorException in 0373811c97699a76e12273b84b2a73ebfd9577d5.php line 17: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name В шаблоне: Код (PHP): {{ $post->user()->name }} В классе Post: Код (PHP): public function user() { return $this->belongsTo('App\User'); } Добавлено спустя 9 минут 49 секунд: Из контроллера идет переменная $post. Код (PHP): public function getPost($id) { $post = Post::findOrFail($id); return view('post')->with('post', $post); } Добавлено спустя 41 минуту 37 секунд: Всё уже сам разобрался перечитывая очередной раз документацию, я случайно заметил что не правильно пользуюсь методами. Было: Код (PHP): {{ $post->user()->name }} Должно было быть: Код (PHP): {{ $post->user()->first()->name }} // Или {{ $post->user->name }} Как всегда ошибка или ерунды, откуда я мог знать что $post->user()->name скобочки не нужны.
Abyss и что ему даст этот vardump применительно к проблеме? Код (PHP): $table->text('user_id'); Код (PHP): $table->integer('user_id')]->unsigned() Не надо делать связующее поле текстовым. В модели User: Код (PHP): public function posts() { return $this->hasMany('App\Post'); } В модели Post: Код (PHP): public function post() { return $this->belongsTo('App\User'); } $user->posts() возвращает объект запроса на который можно навесить дополнительные условия: Код (PHP): $user->posts()->where('active', 1)->get(); $user->posts же просто возвращает коллекцию связанных записей. http://laravel.su/docs/5.0/eloquent#relationships Коллекции: https://laravel.com/docs/5.2/collections (перевод не запилили ещё)
Текстовое оно от не внимательности, а вот если user_id сделать уникальным, сможет ли пользователь относиться к нескольким записям, ведь user_id не должен повторяться в таблице? Добавлено спустя 9 минут 9 секунд: А вот у меня встал вопрос как организовать метки для записей, есть уже таблица tags и таблица posts, отношение многие ко многим. Вроде всё хорошо но: Как добавить метки для записи, если её не существует? Как удалять метку если она не относиться не к одной записи? Как проверять существует ли отношение метки и записи? И как проверить существование самой метки? Добавлено спустя 1 минуту 8 секунд: Я только и читаю это, последнее время.
А зачем делать поле уникальным, если значения в нем заведомо могут повторяться? ) Это связь "многие ко многим", реализуется через связующую таблицу, подробно описано в документации ) А метка - точно такое же поле в таблице, как и любое другое. Есть запись метки, есть запись поста, есть связь между моделями и набор методов для работы с этой связью. Конкретно в каком месте затык? Можно кстати не мудрить, а воспользоваться (или посмотреть) готовым пакетом, к примеру вот: https://github.com/rtconner/laravel-tagging
Рассеянный сегодня я, unsigned не правильно прочитал. Я это уже реализовал, я же писал. В логике работы методов класса post и tag, надо как то удалять метки которые не имеют отношений. И при добавлении поста если нету метки создавать её, но тут вроде всё понятно, а про удаление в голову не чего не приходит. При удаление и создание поста можно запускать метод удаляющий метки не имеющие отношений. Так вот как найти метки которые не относятся не к одному посту. Я первый раз использую laravel, лучше по мудрить для ознакомления, да и кто му же вдруг я изобрету очередную панацею, от всех моих проблем?
Сейчас под рукой даже IDE нету, но примерно так: Код (PHP): $tag->doesntHave('posts')->delete() Ну, можно и не брать, но посмотреть как реализовано там (не конкретно в этом пакете, а вообще, у других) определенно стоит. p.s. стоит учесть, что документация в последних версиях значительно расширилась, но до сих пор там много чего не описано.
Попробую. Стоит, но я думаю из этого не чего хорошего не выйдет, так как мало пакетов для реализации меток, а вот к примеру реализацию ролей пользователей я подсмотрел. Да и к тому же я плохо знаю об классах и методах laravel и восприятие чужого кода не много затруднительно. Всё равно её мало приходиться лазить по коду и узнавать какой метод что возвращает.
Гугло поиск мне не дал не чего по запросу "doesn't have laravel" конкретно по методу doesntHave() не уверен что такое существует, зато нашёл has('tags', '=', 0).
https://github.com/laravel/framework/blob/5.2/src/Illuminat ... r.php#L728 Собственно оно и есть, да )