Почему в laravel может не работать hasMany связь?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Почему в laravel может не работать hasMany связь?

Сообщение EVOSandru6 »

Добрый день,

Есть 2 модели - Марки и Выпуски марок:

Код: Выделить всё

class Mark extends Model
{
    protected $table = 'marks';

    public function editions()
    {
        return $this->hasMany(Edition::class, 'mark_id');
    }
}

class Edition extends Model
{
    protected $table = 'editions';

    public function mark()
    {
        return $this->belongsTo(Mark::class);
    }
}
Проблема в вызове связи на живую модель данных (сами связочные данные в таблицах присутствуют),

Код: Выделить всё

class MarksController extends Controller
{
    public function show(Mark $mark)
    {
         dump($mark->name);
         dd($mark->editions());
    }
}
Хватаю:

Method Illuminate\Database\Query\Builder::editions does not exist.

Странно, например комментарии для статей по такому же принципу связи работают идеально.

Пробовал переименовывать метод связи - не помогло.

Например такая конструкция у меня работает:

Код: Выделить всё

Article::find(1)->comments()->create(['body'=>'haha','user_id'=>1])
Ааналогично:

Код: Выделить всё

Mark::find(1)->editions()->create(['name'=>AhAhAhA]);
Падает с аналогичной ошиибкой:

Method Illuminate\Database\Query\Builder::editions does not exist.



пробовал:

Код: Выделить всё

dd($mark->editions)
Ловлю null

Мне в итоге надо получить:

Код: Выделить всё

$editions = $mark->editions()->orderBy('sort')->get();
На что я ловлю вышеуказанную ошибку.

Склоняюсь - что проблема в модели:

Код: Выделить всё

namespace App\Entity\Vehicle;

use App\Entity\Behaviors\ImagePublicBehavior;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;

class Mark extends Model
{
....

Т.к. добавил сущность комментов для Марок, та же ошибка для:

Код: Выделить всё

$mark->comments()->create(['body' => 'xxx', 'user_id' => 1]);
         dd($mark->comments());

Illuminate\Database\Query\Builder::comments does not exist.


В чем может быть проблема? Подскажите пожалуйста
Ответить