Как работают обратные отношения в Laravel Eloquent? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть две модели / таблицы: publisher и campaign.

Издатель

id | name

Кампания

id | name | PubID

Я создал отношения, чтобы получить кампании Издателя.

$this->hasMany(Campaign::class, 'PubID'); /* In Publisher Model */

Я верю, что приведенная выше строка поможет мне найти соответствующие кампании, но я не уверен насчет обратной связи.

Как видите, внутри таблицы publisher нет ключа campaign_id.Достаточно ли нижеприведенных отношений для обратного?

return $this->belongsTo('App\Publisher'); /* In Campaign Model */

Может ли кто-нибудь помочь мне?Буду признателен.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вы должны указать имя внешнего ключа в принадлежащих

return $this->belongsTo('App\Publisher','PubID');

Laravel Relationships

0 голосов
/ 28 ноября 2018

У вас есть две модели и добавление двух внешних идентификаторов.Это много ко многим работающим.Вам просто нужно добавить сводную таблицу с campain_id и publiser_id

Это прекрасный пример отношения «многие ко многим»: один издатель может принадлежать нескольким кампаниям, а один кампания может иметь несколько издателей.

издателей

ID |ИМЯ

кампаний

ID |NAME

campaign_publisher

campain_id |publisher_id

Последняя таблица в списке - campaign_publisher называется «сводной» таблицей, как указано в заголовке темы.

Итак, вариант 1:

class Campaign extends Model
{
    /**
     * The products that belong to the shop.
     */
    public function publishers()
    {
        return $this->belongsToMany('App\Publisher');
    }
}

Итак, вариант 2:

class Publisher extends Model
{
    /**
     * The shops that belong to the product.
     */
    public function campaigns()
    {
        return $this->belongsToMany('App\Campaign');
    }
}
0 голосов
/ 28 ноября 2018

Да, это так называемое one to many relationship, что означает, что у одного издателя есть много кампаний.И наоборот: кампания принадлежит издателю.Таким образом, чтобы получить все кампании для издателя, которого вы используете:

Publisher::find($id)->campaigns;

Чтобы получить того, кто является издателем кампании, вы используете:

Campaign::find($id)->publisher;

Вы не '* Нужно campaign_id внутри таблицы издателя, которая известна как PubID в таблице вашей кампании.

...