Laravel关系null外键提取

时间:2015-11-25 17:27:28

标签: php eloquent laravel-5.1 foreign-key-relationship

由于我的票证表中的team_id是可选的,我将其设置为可空,但仍然是团队表的外键,但是当我尝试获取与团队表关系的多行票证时, team_id正确返回但是具有null team_id的票证会破坏程序并返回此错误“尝试获取非对象的属性”。

迁移:

Schema::create('tickets', function (Blueprint $table) {
    $table->integer('team_id')->unsigned()->nullable();
});

Schema::table('tickets', function (Blueprint $table) {
    $table->foreign('team_id')
          ->references('id')
          ->on('teams');
});

票证模型

public function team()
{
    return $this->belongsTo('App\Models\Team', 'team_id', 'id');
}

团队模型

public function tickets()
{
    return $this->hasMany('App\Models\Ticket', 'id', 'team_id');
}

票务控制器

$tickets = Ticket::orderBy('created_at', 'desc')
    ->take(10)
    ->get();

foreach ($tickets as $ticket) {
   var_dump($ticket->team->name);
}

2 个答案:

答案 0 :(得分:2)

它会,因为$ticket->team为空的行不存在team_id

你可以这样做

foreach ($tickets as $ticket) {
    if($ticket->team){
        var_dump($ticket->team->name);
    }
}

答案 1 :(得分:0)

外键在所有条件下都是外键,没有办法实现条件外键约束,只有当它不为空时才会查找表。最好的情况(或者说最坏的情况),您可以将NULL值添加到它正在查找的主键表中。