Laravel Datatables отображает данные из связанных таблиц

Я использую Datatables для отображения данных. Это работает хорошо, но когда я хочу отобразить данные из связанных таблиц (моделей), они не отображаются.

Model Keyword.php

public function website() {
    return $this->belongsToMany('App\Website');
}

Модель Website.php

 public function keywords() {
    return $this->hasMany('App\Keyword');
}

таблица базы данных "websites": id, siteName, siteUrl
таблица базы данных "keywords": id, Website_id, kwName

URL-адрес, который должен отображать данные: projects/'.$website->id.'/edit (пример: project/2/edit - (edit - это лезвие)) Итак, по этому URL-адресу я хочу показать таблицу данных, которая отображает все kwName для определенного веб-сайта_id (в этом примере /2/).

Пожалуйста, помогите мне, что я должен использовать и как это сделать.


person R.Jonson    schedule 03.02.2017    source источник


Ответы (1)


Ваши отношения с Eloquent неверны.

keywords имеет ссылку на website через website_id, это отношение belongsTo.

На website ссылается множество keywords, поэтому это отношение hasMany.

Отношения Laravel 5.4 Eloquent

person Jeffrey    schedule 03.02.2017
comment
просто чтобы прокомментировать: вы можете заставить их указывать друг на друга без проблем, например. $farmer->hasmany('chicken') и $chicken->hasone('farmer') - person online Thomas; 03.02.2017
comment
Нет, это не сработает. В хорошем дизайне базы данных всегда есть отношения hasOne/hasMany и ownTo/belongsToMany. Вы говорите, что курица hasOne фермер (фермер ведет учет этой 1 курицы, а также ведет учет «многих» других кур с помощью Chicken.farmer_id). - person Jeffrey; 04.02.2017
comment
да в этом вы правы, это была опечатка. исправление: должно быть $chicken->belongsto('farmer'). хорошее место! - person online Thomas; 04.02.2017
comment
Веб-сайт может иметь много ключевых слов (веб-сайт-›hasMany('App\Keyword') Ключевое слово (идентичное) можно найти на многих веб-сайтах(keywords-›belongsToMany('App\Website'). Так что я думаю, что это возможно. - person R.Jonson; 04.02.2017