Laravel Eloquent: Как отфильтровать результаты связанных моделей? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть таблицы в базе данных:

заказы

 --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
{

}

Теперь мне нужно получить весь заказ там, где клиентназвание страны, например, «Uk» одним запросом sql.Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Следующее должно сделать трюк:

Order::whereHas('customer.country', function($innerQuery) {
    $innerQuery->where('countries.name', 'LIKE', 'Uk');
})->get();
0 голосов
/ 28 марта 2019

Я не уверен, что это хороший способ мышления, но, возможно, я помог

$orders = App\Order::whereHas('customer.country', function ($query) {
        $query->where('name', 'like', 'UK%');
    })->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...