gpt4 book ai didi

laravel - 如何在 Eloquent Laravel 中使用条件关系

转载 作者:行者123 更新时间:2023-12-05 06:26:30 25 4
gpt4 key购买 nike

我有一个“conversation_message”表,并按“sender_type”列(管理员/用户)分隔发件人角色。管理员和用户都在不同的表中。但是当我调用模型时,显示错误 Call to a member function addEagerConstraints() on null


表格列和数据

| id | id_group | id_reply | id_sender | sender_type | message 
| 1 | 1 | null | 3 | admin | Hi, I'm admin
| 2 | 1 | 1 | 3 | admin | I wanna give u promo
| 3 | 1 | 2 | 18 | user | What's promo ?

我试过 if 条件与列值,但它不起作用。

Conversation_message.php

public function sender(){
switch($this->sender_type){
case "user":
return $this->belongsTo(User::class, 'id_sender', 'id');
case "admin":
return $this->belongsTo(Admin::class, 'id_sender', 'id');
default:
return;
}
}

InboxController.php

public function message_detail_chat($groupId){
$data = [];
$data['messages'] = Conversation_message::with('replies')
->with('sender')
->with('recipients')
->where(['id_group' => $groupId])->get();
}

我希望按列值“sender_type”使用条件模型,但实际输出是错误的。

最佳答案

laravel 提供查询范围,你可以从这里阅读 https://laravel.com/docs/5.8/eloquent#local-scopes

   function userSender(){
$this->belongsTo(User::class, 'id_sender', 'id');
}

function adminSender(){

return $this->belongsTo(Admin::class, 'id_sender', 'id');

}

public function scopeSender($query)
{
return $query
->when($this->sender_type === 'user',function($q){
return $q->with('userSender');
})
->when($this->sender_type === 'admin',function($q){
return $q->with('adminSender');
});

}

现在您可以像这样访问您的发件人

     Conversation_message::Sender()->first();

这应该会给您正确的发件人。希望能帮助到你。

关于laravel - 如何在 Eloquent Laravel 中使用条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56086973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com