У меня есть таблица «транзакции». в этой таблице у меня есть несколько столбцов: 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");
distinct
не существует функции для коллекций Laravel, но unique
является.
$user->transactions->unique("restaurant_name");
Однако это будет запрашивать все транзакции и фильтровать в коде. Чтобы получить отдельные строки с помощью запроса, вы можете сделать следующее:
$user->transactions()->groupBy('restaurant_name')->get();
Других решений пока нет …