Laravel hasMany and belongsTo parameters

后端 未结 2 1812
梦毁少年i
梦毁少年i 2020-12-14 04:15

I have a table store, and store has many libraries, in library I have foreign key of store store_id.

Store table

id(PK)

L

相关标签:
2条回答
  • 2020-12-14 04:59

    To simplify the syntax, think of the return $this->hasMany('App\Comment', 'foreign_key', 'local_key'); parameters as:

    1. The model you want to link to
    2. The column of the foreign table (the table you are linking to) that links back to the id column of the current table (unless you are specifying the third parameter, in which case it will use that)
    3. The column of the current table that should be used - i.e if you don't want the foreign key of the other table to link to the id column of the current table

    In your circumstance, because you have used store_id in the libraries table, you've made life easy for yourself. The below should work perfectly when defined in your Store model:

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

    Behind the scenes, Laravel will automatically link the id column of the Store table to the store_id column of the Library table.

    If you wanted to explicitly define it, then you would do it like this:

    public function libraries(){
        return $this->hasMany('App\Library', 'store_id','id');
    }
    
    • A model standard is that singularly-named functions return a belongsTo, while a plural function returns a hasMany (ie. $store->libraries() or $library->store()).
    0 讨论(0)
  • 2020-12-14 05:06

    Try this one. It works. Add this to your model.

    Library model

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

    Store model

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

    example code.

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

    Because in this case a store has many libraries, the Store model has a libraries() function. Refer to last line of James' answer for more information on this standard.

    0 讨论(0)
提交回复
热议问题