Вот моя База данных Структура:
Products : ['id','name','image']
Request : ['id','marketer_id','distributor_id']
RequestItems : ['id','request_id','product_id','quantity']
Теперь это лишь краткий пример структуры. то, что я пытаюсь сделать, это то, что у меня есть страница с запросом, которая на этой странице я получаю элементы в базе запросов на таблице RequestItems
, и я хочу добавить кнопку на своей странице, чтобы добавить продукт в этот запрос, но я хочу показать продукты, которых нет в RequestItems
.
. Я могу поставить условие перед проверкой продукта, чтобы убедиться, что пользователь не добавит 1 продукт 2 раза в запросе, но я также хочу прояснить, что пользователь видит товары в кнопке добавления, которые уже существуют в его элементах запроса.
Мне просто нужна помощь для Query, я разрабатываю с Laravel
& vue.js
для SPA .
Мое решение (но в поисках лучшего решения):
public function getRequestRepresentativeSideProducts(RepresentativesRequests $id, Request $request){
$products = DistributorProducts::where(
'distributor_id', $request->distributor_id
)
->latest()
->get();
$data = $id->items()->latest()->get();
$myArray = array();
for ($i = 0; $i < $data->count(); $i++)
{
$myArray[] = $data[$i]->product_id;
}
return $products->except($myArray);
}
Редактировать 01: Мне удалось получить ответ с помощью запроса ниже, но он принимает все данные
$data = DistributorProducts::doesntHave('requestRepresentativeSideItems', 'and', function ($query){
$query->where('representative_request_id', '=', 1);
})->where('distributor_id', $request->distributor_id)
->latest()
->get();
$data = DistributorProducts::whereDoesntHave('requestRepresentativeSideItems', function (Builder $query) use ($id) {
$query->where('representative_request_id', 'like', $id->id);
})->where('distributor_id', $request->distributor_id)
->latest()
->get();
$data = DistributorProducts::whereDoesntHave('requestRepresentativeSideItems', function (Builder $query) use ($id) {
$query->where('representative_request_id', $id->id);
})->where('distributor_id', $request->distributor_id)
->latest()
->get();
У меня есть 3 продукта для distributor_id
, 2 из которых находятся в элементах запроса, поэтому мой запрос должен показывать 1, но будет отображаться над запросом, но я получаю все продукты.
Редактировать 02: я проверил, откуда из $ query и использовал как и C повесил request_id, но результат не изменился. похоже, он просто игнорирует эту часть.