Laravel Eloquent:如何过滤相关模型的结果?

时间:2019-03-28 20:31:30

标签: laravel eloquent

我在数据库上有表:

订单

 --id
  --customer_id

客户

  --id
  --name
  --country_id

国家

 --id
  --name

以及下一个雄辩的模特:

Order.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
   /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function customer()
    {
        return $this->belongsTo('App\Models\Customer');
    }
}

客户:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
   /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function country()
    {
        return $this->belongsTo('App\Models\Country');
    }
}

国家/地区:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{

}

现在,我需要通过一个sql查询获得所有客户国家名称(如“ Uk”)的订单。我该怎么办?

2 个答案:

答案 0 :(得分:1)

以下应该可以解决问题:

Order::whereHas('customer.country', function($innerQuery) {
    $innerQuery->where('countries.name', 'LIKE', 'Uk');
})->get();

答案 1 :(得分:0)

我不确定这是否是一种好的思考方式,但也许我有所帮助

$orders = App\Order::whereHas('customer.country', function ($query) {
        $query->where('name', 'like', 'UK%');
    })->get();