我有一个带有外键的主表Tickets到另一个名为ticket_statuses的表。我想根据外键从ticket_statuses显示状态字段。
TicketsController.php
<?php
namespace App\Http\Controllers\Users;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Ticket;
use App\TicketStatus;
use App\Models\User;
etc...
class TicketsController extends UserController
{
public function index()
{
$tickets = Ticket::paginate(25);
return view('user.tickets.index', compact('tickets'));
}
}
Ticket.php
class Ticket extends Model
{
// Ticket __belongs_to__ User
public function user()
{
return $this->belongsTo('App\Models\User');
}
public function ticketstatus()
{
return $this->belongsTo('App\TicketStatus');
}
}
TicketStatus.php
class TicketStatus extends Model
{
// Ticket Status __has_many__ Ticket
public function tickets()
{
return $this->hasMany('Ticket');
}
}
index.blade.php
@foreach($tickets as $item)
<tr>
<td>{{ $item->ticket_statuses->status }}</td>
<td>{{ $item->customer }}</td>
<td>{{ $item->user->first_name }} {{ $item->user->last_name }}</td>
<td>
{!! Form::close() !!}
</td>
</tr>
@endforeach
由于行{{$ item-&gt; ticket_statuses-&gt; status}},我收到错误。我也试过{{$ item-&gt; ticketstatus-&gt; status}}错误是试图获取非对象的属性
请帮忙。感谢
答案 0 :(得分:1)
如果您的$item
可能没有ticket_statuses,您可能需要在显示之前进行检查。
<td>{{ isset($item->ticketstatus) ? $item->ticket_statuses->status : '' }}</td>
或使用Laravel Blade速记
<td>{{ $item->ticketstatus->status or "default message" }}</td>
答案 1 :(得分:1)
您在Ticket模型中的关系名称是ticketstatus,并且您正在尝试使用ticket_statuses获取数据,这是完全错误的,尝试使用您的关系名称,如下所示
$item->ticketstatus->status
答案 2 :(得分:1)
正如您在评论中提到的,请更改
public function ticketstatus()
{
return $this->belongsTo('App\TicketStatus');
}
到
public function ticketstatus()
{
return $this->belongsTo('App\TicketStatus', '_ticket_status_id', 'id');
}
然后再次使用{{ $item->ticketstatus->status }}
。根据关系,当您使用ticket_status_id
tickets
表格中查找_ticket_status_id
列
如果有帮助,请告诉我们。