Laravel 5.4 нужно получать разные записи через красноречивые отношения

У меня есть таблица «транзакции». в этой таблице у меня есть несколько столбцов: id, user_id, customer_name, restaurant_name и отметки времени.
Что мне нужно, так это то, что если у меня в таблице две или три одинаковые записи, это означает, что restaurant_name повторяется с тем же user_id. Мне нужно получить только уникальные записи. Если пользователь заказывал в одном ресторане 3 раза, мне нужно получить только 1 из них.

Пример:
Если я заказываю форму Pizza Hut 3 раза и заказываю у метро 5 раз. Результат должен содержать 1 пиццерию и 1 метро.

Замечания: 1 пользователь может иметь много транзакций

Модель транзакции:

<?php

namespace App;
use App\restaurant;
use App\User;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{
public function user(){
return $this->belongsTo(User::class);
}

public function restaurant(){
return $this->belongsTo(restaurant::class);
}

protected $fillable = [
'user_id','customer_name', 'restaurant_name' , 'ordered_items' ,
];
}

Модель пользователя:

<?php

namespace App;
use App\restaurant;
use App\User;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{
public function user(){
return $this->belongsTo(User::class);
}

public function restaurant(){
return $this->belongsTo(restaurant::class);
}

protected $fillable = [
'user_id','customer_name', 'restaurant_name' , 'ordered_items' ,
];
}

Я пытаюсь получить желаемый результат, как это, но он показывает мне ошибку:

BadMethodCallException in Macroable.php line 74:
Method distinct does not exist.

$user->transactions->distinct("restaurant_name");

2

Решение

distinct не существует функции для коллекций Laravel, но unique является.

$user->transactions->unique("restaurant_name");

Однако это будет запрашивать все транзакции и фильтровать в коде. Чтобы получить отдельные строки с помощью запроса, вы можете сделать следующее:

$user->transactions()->groupBy('restaurant_name')->get();
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]