Laravel 5.1-具有空值的模型上的关系

Raf*_*ube 1 laravel eloquent blade laravel-5 laravel-5.1

我在Laravel 5.1上具有空值的模型上的关系存在问题。

我有2个表任务和用户。在“任务”中,我具有id_requester和id_responsible列。

我想显示所有任务,我总是有一个请求者,但有时我还没有一个负责人。

因此,在这种情况下,id_responsible为null。

我的模特是:

 protected $table = 'tasks';

 protected $fillable = array(
            'id_requester',
            'id_responsible',
        );

public function requester()
    {
        return $this->hasOne('app\User', 'id', 'id_requester');
    }

public function responsible()
    {
        return $this->hasOne('app\User', 'id', 'id_responsible');
    }
Run Code Online (Sandbox Code Playgroud)

我的控制器中的查询是:

$tasks = Tasks::get();
Run Code Online (Sandbox Code Playgroud)

我试图在这样的视图中显示:

<table>
...
@foreach($tasks as $task)
   <td>{{ $task->requester->name }}</td>

   <td>{{ $task->responsible->name }}</td>
@endforeach
...
</table>
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试访问该页面时,出现错误“试图获取非对象的属性”。

我已经测试过了,这只有在我有一个id_responsible = Null的时候。

如何解决此问题以显示所有寄存器?

谢谢!!!

Tho*_*Kim 5

首先,让我们谈谈显示条件数据。

从文档中:https : //laravel.com/docs/5.2/blade#displaying-data

有时您可能希望回显一个变量,但是不确定是否已设置该变量。我们可以这样用冗长的PHP代码来表示:

{{ isset($name) ? $name : 'Default' }}

但是,刀片式服务器提供了以下便捷的捷径,而不是编写三元语句:

{{ $name or 'Default' }}

在此示例中,如果$ name变量存在,将显示其值。但是,如果不存在,则会显示默认值。

换句话说,您应该能够执行以下操作:

<td>{{ $task->requester->name or 'No requester' }}</td>

<td>{{ $task->responsible->name or 'Nobody responsible.' }}</td>
Run Code Online (Sandbox Code Playgroud)

仅当存在适当数据时,它才会显示。如果不是,它将显示“无人负责”或“无请求者”。

但是,如果您的问题是如何获取仅由某人负责的任务,则可以更改查询以使用以下has方法:

$tasks = Tasks::has('responsible')->get();
Run Code Online (Sandbox Code Playgroud)

这只会检索已分配了“负责人”的任务,这样您就不必担心空值。