Laravel порядок сортировки для отношения и текущей таблицы - PullRequest
0 голосов
/ 30 марта 2020

У меня есть обзорная таблица и review_photos. Я хотел бы получить все отзывы из указанного c заказа продукта по их столбцу updated_at и предварительно просмотреть отзывы с фотографиями, которые будут отображаться первыми в пределах указанной даты c. Приведенное ниже решение будет возвращать только отзывы с фотографиями, а те, у которых нет фотографий, не будут отображаться.

Модель обзора

public function photos()
{
    return $this->hasMany('App\Models\Booking\ReviewPhoto');
}

Модель обзора

public function review()
{
    return $this->belongsTo('App\Models\Booking\Review');
}

Обзор репозитория

public function getProductReviews($product_id, $paginate = false)
{
    $query = $this->review->where('product_id', $product_id)->whereHas('photos')->orderByDesc('updated_at');

    if ($paginate !== false) {
        return $query->paginate($paginate);
    }

    return $query->get();
}

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Использование with Запрос

$query = $this->review->where('product_id', $product_id)->with('photos')->orderByDesc('updated_at');

Это похоже на

$query = Product::whereHas('photos', function($query) {
    $query->orderBy('updated_at','DESC');
})->with(['photos' => function($query) {
    $query->orderBy('updated_at','DESC');
}])->where('product_id', $product_id)->orderByDesc('updated_at')->get();
0 голосов
/ 30 марта 2020

для получения соединения без условий, вы можете использовать с

$ query = $ this-> review-> where ('product_id', $ product_id) -> with (' фото ') -> orderByDes c (' updated_at ');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...