2017-04-07 66 views
0

我使用默认用户模型,我创建了一个UserStatus型号:默认用户模型和Relatinship - Laravel 5.4

用户

class User extends Authenticatable 
{ 
use Notifiable; 

/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = [ 
    'name', 'email', 'password', 
]; 

/** 
* The attributes that should be hidden for arrays. 
* 
* @var array 
*/ 
protected $hidden = [ 
    'password', 'remember_token', 
]; 

public function status() 
{ 
    return $this->belongsTo('App\UserStatus'); 
} 

}

UserStatus

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class UserStatus extends Model 
{ 
public $timestamps = false; 

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

我不能获得相关的模型属性,因为$用户>状态是NULL:

$users = User::all(); 

foreach ($users as $user) { 
    var_dump($user->status->name); 
} 

什么是最好的做法/解决方案?

谢谢!

回答

0

您的查询会导致您的N + 1查询问题。

试试这个是有效的

$users = User::with('status')->get(); 

foreach ($users as $user) { 
    logger($user->status->name); 
} 
+0

**调用未定义的关系[状态]型号[ Illuminate \ Foundation \ Auth \ User]。** – Peter

+0

则意味着您的用户模型有问题。使用** Illuminate \ Database \ Eloquent \ Model **扩展用户类以查看它是否可行。 – oseintow

0

有两种方法可以解决:

  1. 只需添加一个防御条件:

    $users = User::all(); 
    
    foreach ($users as $user) { 
        if(!empty($user->status)) 
         var_dump($user->status->name); 
    } 
    
  2. 你定义一个可空列user_status_id在您的用户表中,并使其在user_status ta中的ID为外键BLE并在User模型创建关系:hasOne,给外键,然后只需要用户哪些是有一些状况,否则不:

    $users = User::whereNotNull('user_status_id')->get();