Laravel口才如何建立逆向关系?

时间:2018-11-28 09:06:24

标签: php laravel eloquent relationship

我有两个模型/表格:d = {1: 5, 2: 0, 3: 4, 4: 0, 5: 1} key_max_val = sorted([(k,v) for k,v in d.items() if k in [1,2,3]])[0][0] print(key_max_val) # Outputs 1 publisher

发布者

campaign.

广告系列

id | name

我创建了一个关系来获取发布者的广告系列。

id | name | PubID

我相信以上内容将帮助我检索相关的广告系列,但是我对逆向关系感到困惑。

如您所见,$this->hasMany(Campaign::class, 'PubID'); /* In Publisher Model */ 表中没有键campaign_id。下面的关系足以满足反要求吗?

publisher

有人可以引导我吗?我会很感激的。

3 个答案:

答案 0 :(得分:1)

是的,这就是所谓的one to many relationship,这意味着一个发布者拥有许多广告系列。相反的是,活动属于发布者。 因此,为了获得发布商的所有广告系列,您可以使用:

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

要获取广告系列的发布者,请使用:

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

您不需要在发布者表中使用campaign_id,而在广告系列表中PubID可以知道。

答案 1 :(得分:0)

您需要在belongsTo中指定外键名称

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

Laravel Relationships

答案 2 :(得分:0)

您有两个模型,并添加了两个外部ID。这是许多工作。您只需要添加带有campain_id和publiser_id的数据透视表

这是多对多关系的完美示例:一个发布者可以属于多个广告客户,而一个发布者可以具有多个发布商。

发布者

ID |姓名

活动

ID |姓名

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