Laravel 5.1中两个表之间的多对多关系连接查询

时间:2015-12-26 14:03:09

标签: laravel model laravel-5 eloquent laravel-5.1

第一个User表有四列:id ,first_name, last_name,password

我的Address表有四个colmnns​​ id , company_name,email , phone

普通Address_user表:

enter image description here

我的用户模型看起来像http://pastebin.com/ntuvJ8Lj,我的地址模型看起来像这样

use Illuminate\Database\Eloquent\Model;

class Address extends Model
{
    protected $fillable = [
    'created_by',
    'company_name',
     'phone', 
     'email', 'address'
    ];
    public function users()
    {
        return $this->belongsToMany('App\Models\User');
    }
    public function getAddressListAttribute()
    {
        return $this->users->lists('id');
    }
}

现在我需要登录用户参与或连接的所有地址

1

1 个答案:

答案 0 :(得分:0)

User.php

中的

使用'地址'添加您的关系模型:

public function addresses() {
        return $this->belongsToMany( Address::class, 'address_id', 'user_id' )->withTimestamps();
    }

您在Address.phpusers中写下了正确的关系,因此,我不会在此重新输入。

请注意,您不需要撰写address_iduser_id,因为如果您遵循惯例,只需雄辩就能预测它!

但是我可以告诉你,你没有遵循命名表的惯例,如果你想要 Eloquent 来预测你的模型和你的数据库中的表之间的关系,那么你必须得到名称您的模型是表名的单数,反之亦然,表:users模型:User

要点:

$user = auth()->user(); // get logged in user

$addresses = $user->addresses()->get(); // get this user addresses. or use $user->addresses only 

// now you may loop through it and have each of your addresses.
foreach($addresses as $address){
    var_dump($address->company_name); // or perhabs ->email
}