Laravel 有很多和属于参数

2022-08-30 15:33:38

我有一个表格存储,存储有很多库,在库中我有存储的外键。store_id

存储表

id(PK)

库表

id(PK)
store_id(FK)

我对它说的文档中的参数感到困惑,并且参数包括hasManybelongsTo

返回 $this->hasMany('App\Comment', 'foreign_key');

返回 $this->hasMany('App\Comment', 'foreign_key', 'local_key');

返回 $this->belongsTo('App\Post', 'foreign_key', 'other_key');

哈斯多foreign_key和local_key来自哪一张桌子?与属于属于哪个表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,所以我总是想指定哪个是外键和主键


答案 1

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

  1. 要链接到的模型
  2. 链接回当前表列的外表(要链接到的表)的列(除非您指定了第三个参数,在这种情况下,它将使用该参数)id
  3. 应使用的当前表的列 - 即,如果您不希望其他表的外键链接到当前表的列id

在你的情况下,因为你在桌子上使用了,你已经让自己的生活变得轻松。在模型中定义时,以下操作应该可以完美地工作:store_idlibrariesStore

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

在幕后,Laravel 会自动将表的列链接到表的列。idStorestore_idLibrary

如果你想显式定义它,那么你可以这样做:

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

答案 2

试试这个。它的工作原理。将其添加到模型中。

库模型

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

商店模式

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

示例代码。

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

因为在这种情况下,一个商店有许多库,所以模型有一个函数。请参阅詹姆斯答案的最后一行,了解有关此标准的更多信息。Storelibraries()


推荐