首页 文章

Laravel hasMany和belongsTo参数

提问于
浏览
6

我有一个表存储,并且存储库有很多库,在库中我有商店的外键 store_id .

存储表

id(PK)

图书馆表

id(PK)
store_id(FK)

我对 hasManybelongsTo 参数包含了疑惑,在docs中它说

return $ this-> hasMany('App \ Comment','foreign_key'); return $ this-> hasMany('App \ Comment','foreign_key','local_key'); return $ this-> belongsTo('App \ Post','foreign_key','other_key');

hasMany foreign_key和local_key来自哪个表?和belongsTo一样,foreign_key和other_key的表来自哪个?

商店模型

public function library(){
    return $this->hasMany('App\Library', 'what_foreign_key_should_be_here','what_other_key_should_be_here');
}

图书馆模型

public function stores(){
    return $this->belongsTo('App\Stores', 'what_foreign_key_should_be_here', 'what_other_key_should_be_here');
}

因为有时我将表的主键id更改为其他名称,如sid,所以我总是想指定哪个是外键和主键

2 回答

  • 1

    要简化语法,请将 return $this->hasMany('App\Comment', 'foreign_key', 'local_key'); 参数视为:

    • 要链接到的模型

    • 外部表的列(您链接到的表)链接回当前表的 id 列(除非您指定第三个参数,在这种情况下它将使用它)

    • 应该使用的当前表的列 - 即,如果您不希望另一个表的外键链接到当前表的 id

    在您的情况下,因为您在 libraries 表中使用了 store_id ,所以您自己的生活很轻松 . 在 Store 模型中定义时,下面应该可以正常工作:

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

    在幕后,Laravel会自动将 Store 表的 id 列链接到 Library 表的 store_id 列 .

    如果你想明确定义它,那么你会这样做:

    public function libraries(){
        return $this->hasMany('App\Library', 'store_id','id');
    }
    
    • 模型标准是单个命名的函数返回belongsTo,而复数函数返回hasMany(即 $store->libraries() or $library->store() ) .
  • 9

    试试这个吧 . 有用 . 将其添加到您的模型中 .

    Library model

    public function store()
        {
            return $this->belongsTo(Store::class, 'store_id', 'id');
        }
    

    Store model

    public function library()
        {
            return $this->hasMany(Library::class);
        }
    

    example code.

    $store = Store::find(1);
     dd($store->library);
    

相关问题