天天看点

laravel表连接一对一,多对一和多对多关系

区分父表与子表

1.”一”的是父表

2.”多”的一方是子表

如何处理一对多关系

在子表中建一个字段(外键)指向父表

如何处理多对多关系

建立一张中间表,将”多对多”关系转化为”一对多”

一对一hasOne

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserModel extends Model
{
    public function Userinfo()
    {
        /*
         * @param [string] [name] [需要关联的模型类名]
         * @param [string] [foreign] [参数一指定数据表中的字段]
         * */
        return $this->hasOne(UserInfo::class,'user_id');
    }
 }
           

一对多hasMany

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserModel extends Model
{
    public function article()
    {
        return $this->hasOne(Article::class,'user_id');
    }
 }
           

多对一 belongTo

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserModel extends Model
{
    public function city()
    {
        return $this->belongTo(City::class,'city_id');
    }
 }
           

多对多 belongToMany

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserModel extends Model
{
    public function Role(){
        /*
         * 第一个参数:要关联的表对应的类
         * 第二个参数:中间表的表名
         * 第三个参数:当前表跟中间表对应的外键
         * 第四个参数:要关联的表跟中间表对应的外键
         * */
        return $this->belongsToMany('App\Role','user_role','user_id','role_id');
    }
}