E
E
EVOSandru62018-08-04 00:28:27
Laravel
EVOSandru6, 2018-08-04 00:28:27

Why might the hasMany relationship not work in laravel?

Good afternoon,
There are 2 models - Stamps and Stamp Issues:

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);
    }
}

The problem is in calling a link to a live data model (the link data itself is present in the tables),
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.

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

Answer the question

In order to leave comments, you need to log in

4 answer(s)
E
EVOSandru6, 2018-08-04
@EVOSandru6

Название модели исправил с Mark на Brand, и ..... заработало. Чем ему Mark не нравился, ума не приложу. Я в тяжелом недоумении.

V
vism, 2018-08-04
@vism

protected $table = 'editions';

T
Tanukin, 2018-08-04
@Tanukin

Скобки не нужны для получения данных:
$mark->editions
Скобки используются для связи между таблицами, например для сохранения
$mark->editions()->save($editions)

J
JhaoDa, 2018-08-04
@JhaoDa

Как обычно — ВДРУГ в вопросе появляются «незначительные» дополнения в виде

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

Предлагаю отключить всё, кроме use Illuminate\Database\Eloquent\Model; и проверить. Если поможет, то включать по одному и опять проверять.
P.S. Автор, делай так и дальше — не выдавай всю информацию сразу. А то нам же тут скучно...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question