我想用较少的查询调用关系到访问器函数
ticket有很多消息票证模型有访问器功能我想进入访问器功能如果ticket-> messages() - > exists()== TRUE返回messages body, or ** if ticket->messages()->exist() == TRUE** returns ticket
s body这行代码($ ticket-> last_body)在视图中为每行写一个查询我想减少我的查询
门票型号:
class Ticket extends Model
{
public function messages()
{
return $this->hasMany(TicketMessage::class, 'ticket_id');
}
public function getLastBodyAttribute()
{
if($this->messages()->exists()){
return $this->messages()->orderByDesc('created_at')->first()->body;
} else {
return $this->body;
}
}
}
门票按摩属于门票
TicketMessage模型:
class TicketMessage extends Model
{
public function ticket()
{
return $this->belongsTo(Ticket::class,'ticket_id');
}
}
我得到自己的关系票,并传递给查看TicketController:
class TicketController extends Controller
{
public function index(Request $request)
{
$tickets = Ticket::with('messages')
->where('status', 'open')
->get();
return view('ticket::supporter.supporter', compact('tickets'));
}
}
this line code $ticket->last_body make one Query for each row and i want to decrease my query
**supporter.blade** :
@foreach($tickets as $ticket)
<a href="{{url(Route('show_client_ticket', ['id' => $ticket->id]))}}">
{{$ticket->subject}}
</a>
<p style="color: #959A9D;">
{{$ticket->last_body}} //this line returns too much Query
</p>
<hr>
@endforeach
试着改变这个。
public function ticket()
{
return $this->belongsTo(Ticket::class,'ticket_id');
}
对此。
public function ticket()
{
return $this->belongsTo(Ticket::class,'id');
}
因为模型的默认主键是“id”。
或者如果要更改主键。试试这个:
class Ticket extends Model
{
protected $primaryKey = 'ticket_id';
...