【问题标题】:Laravel eloquent model set condition at belongsTo methodLaravel eloquent 模型在 belongsTo 方法中设置条件
【发布时间】:2016-07-19 15:56:52
【问题描述】:

我有一个模型类 ServiceAgentRel。其中 agent_id 属于用户表。我正在使用 service_id 3 获取所有列。

 $agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')->get();

使用此代码,我可以获得 service_id 3 的所有服务但是如果用户状态(对应于该 agent_id 的状态)为非活动状态,则我需要在用户表上设置一个条件,不会获取任何行。 我的主要要求是,我必须在关系函数 agent() 上设置条件。还有有什么方法可以从控制器中检查吗?

class ServiceAgentRel extends Model {
    public function agent(){
        return $this->belongsTo('App\User', 'agent_id', 'id');
    }
}

我知道可以通过简单的连接来完成这项任务,但我想知道是否可以通过 eloquent 模型函数来完成。 谢谢 在此处输入图片说明

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    为此你需要使用 whereHas,就像那样

    $agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')
    ->whereHas('agent',function($query) {
     $query->where('status', 'active');
    })->get();
    

    【讨论】:

    • 感谢您的回答。它可以工作,除非我在 whereHas 函数中不使用数组我看到这个错误:****Argument 2 passed to Illuminate\Database\Eloquent\Builder::whereHas() must be an instance of Closure, none given** ** 所以我使用 whereHas('agent', function($query) { $query->where('status', 'active'); }) 而不是数组。它正在工作。谢谢。
    • @murad 你是对的。如果这个答案对你有用,请接受这将对其他人有帮助。
    • @ImtiazPabel 感谢伙计,它工作得很好。我在哪里可以找到所有这些很酷的雄辩查询的深入解释?
    【解决方案2】:

    嗨,你可以这样做

    $agent_data = App\ServiceAgentRel::where(['service_id'=>3])->first();
    
    echo $agent_data->agent->name;
    

    【讨论】:

      【解决方案3】:

      你可以使用这个语句:

      $agent_data = App\ServiceAgentRel::where(['service_id'=>3])
        ->with(['agent' => function($query) {
            $query->where('agent.status', 'active');
        }])->get();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        相关资源
        最近更新 更多