【问题标题】:Laravel Eloquent : with query parametersLaravel Eloquent:带有查询参数
【发布时间】:2014-11-11 02:42:10
【问题描述】:

我终于想出了如何组合一个复杂的查询来获得相关的模型。

这就是我的查询当前的样子...

    $campaign = Campaign::find($campaign_id);
    $buyers = $campaign->buyers()->with('notes')->with(['emails' => function($q){
        $q->where('campaign_id', '13');
    }])->get();

复杂的部分是我试图从emails 获取匹配的buyer_idcampaign_id 的条目。这个查询以一种非常有效的方式实现了我所追求的目标......

但是...我不知道如何将参数传递给 with 闭包。目前,我已将 ID 13 硬编码到闭包中的 where 查询中,但我希望它等于传递给原始函数的 $campaign_id

我该怎么做?

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    如果有人有同样的问题,请解决...需要使用use 声明

        $campaign = Campaign::find($campaign_id);
        $buyers = $campaign->buyers()->with('notes')->with(['emails' => function($q) use ($campaign_id){
            $q->where('campaign_id', $campaign_id);
        }])->get();
    

    这在任何地方都有记录吗?

    【讨论】:

    • 这是 PHP 的核心功能。由于这个原因,我怀疑它在 Laravel 文档中。
    • 哈..真的!?说明我是个 PHP 菜鸟。谢谢
    【解决方案2】:

    试试这个

    $mainQuery=StockTransactionLog::with(['supplier','customer','warehouse','stockInDetails'=>function($query) use ($productId){
                $query->with(['product'])->where('product_stock_in_details.product_id',$productId);
            },'stockOutDetails'=>function($query) use ($productId){
                $query->with(['product'])->where('product_stock_out_details.product_id',$productId);
            },'stockDamage'=>function($query) use ($productId){
                $query->with(['product'])->where('product_damage_details.product_id',$productId);
            },'stockReturn'=>function($query) use ($productId){
                $query->select('id','return_id','product_id');
                $query->with(['product'])->where('product_return_details.product_id',$productId);
            }]);
    

    【讨论】:

      【解决方案3】:
      $latitude = $request->input('latitude', '44.4562319000');
      $longitude = $request->input('longitude', '26.1003480000');
      $radius = 1000000;
      
      $locations = Locations::selectRaw("id, name, address, latitude, longitude, image_path, rating, city_id, created_at, active,
                           ( 6371 * acos( cos( radians(?) ) *
                             cos( radians( latitude ) )
                             * cos( radians( longitude ) - radians(?)
                             ) + sin( radians(?) ) *
                             sin( radians( latitude ) ) )
                           ) AS distance", [$latitude, $longitude, $latitude])
          ->where('active', '1')
          ->having("distance", "<", $radius)
          ->orderBy("distance")
          ->get();
      

      【讨论】:

        【解决方案4】:
        $fpr = FPR::with([
          'detail','of_permintaan.detail', 
          'of_permintaan.detail.pembelian'=>function($q)use($id){
               return $q->where('pembelian_id',$id);}
        ])->findOrFail($id);
        

        好吧,如果你需要将它传递给它的 child-child 关系,但我不推荐它

        【讨论】:

          猜你喜欢
          • 2021-02-11
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          • 2020-08-15
          • 2015-04-02
          • 1970-01-01
          • 2017-10-22
          • 2016-02-09
          相关资源
          最近更新 更多