php - 访问器函数中的调用关系
问题描述
我想用更少的查询将关系调用到访问器函数中
票证有很多消息票证模型有访问器函数我想进入访问器函数 如果票证->消息()->存在()==真返回消息s body, or ** if ticket->messages()->exist() == TRUE** returns ticket
的正文这一行代码($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';
...
推荐阅读
- php - 大数据php的循环问题
- javascript - 如何将从数据库动态填充的下拉列表添加到数据表gridview中的每一行
- c# - 通过 VSTO 加载项打开现有 MS Word 文档时出现异常,您无法关闭 Microsoft Word,因为打开了一个对话框
- javascript - 从 request.files _ nodejs 读取内容
- javascript - 如何在reactjs中重复获取并渲染更新的api数据?
- python-3.x - 如何在python的3d图中设置轴的线宽?
- c++ - 将 std::variant 与 gmock 1.8 对象一起使用时编译错误
- python - Python:网页抓取标签导航 wiki 表
- javascript - 测试变量类型或抛出 TypeScript 的函数?
- python - 通过单词后面的第二个元音从字符串中获取子字符串