【问题标题】:Many to Many Relationship Join Query between Two Table in Laravel 5.1Laravel 5.1中两个表之间的多对多关系连接查询
【发布时间】:2015-12-26 14:03:08
【问题描述】:

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

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

普通Address_user表:

我的用户模型看起来像这样 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

【问题讨论】:

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


【解决方案1】:

User.php

添加您与“地址”模型的关系:

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

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

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

但我可以告诉您,您没有遵循命名表的约定,如果您希望 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
}

【讨论】:

  • @HoqueMdZahidul 欢迎好友!我希望你把它标记为你的答案:)
  • @HoqueMdZahidul 在您的用户表中添加字段,将其命名为role 并存储USERADMIN 的值,并在您的User.php 中添加常量const ROLE_ADMIN = 'ADMIN';const ROLE_USER = 'USER'; 和然后在你的用户上使用 if if($user->role == User::ROLE_ADMIN);
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 2018-11-06
  • 2015-03-07
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多