2016-08-16 3 views
1

У меня есть таблица наблюдения. Пользователь может добавить товар в список наблюдения. таким образом заполняются user_id и product_id.избегая цикла при проверке значений

id user_id product_id 
1 1   3 
2 1   4 
3 1   5 
4 2   3 
5 2   4 
.. ..   .. 

Я хочу иметь кнопку «Добавить продукт в список», если только этот продукт уже выигрыш в этой таблице избранной этого user.ohterwise «Удалить продукт из избранной» кнопки. это то, что у меня есть в контроллере.

public function index() 
    { 
     $products=Product::where(['status'=>'On sale'])->get(); 
     $check=Watchlist::where(['user_id'=>Auth::user()->id])->get(); 
     return View('product.index',['products'=>$products,'check'=>$check]); 
    } 

и в представлении: если я следующие кнопки появляется столько раз, сколько есть user_id в таблице избранного из этого цикла. но мне нужен цикл, чтобы проверить все product_id пользователя.

<?php foreach($products as $product):?> 
     <?php foreach($check as $che):?> 
      <?php 
       if($che->product_id==$product->product_id) 
       { 
       ?><a href="" class="removewatchlist" data-id="<?php echo $product->product_id;?>"><button class="btn btn-info">Remove from watchlist</button></a> <?php 
       } 
       else 
       { 
       ?><a href="" class="watchlist" data-id="<?php echo $product->product_id;?>"><button class="btn btn-info">Add to watchlist</button></a> <?php 
       } 

       ?> 
     <?php endforeach;?> 
    <?php endforeach;?> 

ответ

0

Вы могли бы просто создать массив со всеми идентификаторами продуктов, которые находятся в списке наблюдения в контроллере, как:

$chraw = Watchlist::where(['user_id'=>Auth::user()->id])->get(); 
$check = array(); 
foreach($checkb as $che) 
    $check[] = $che->product_id; 

А вид просто проверить, если идентификатор находится в массиве:

<?php foreach($products as $product): ?> 
    <?php if(in_array($product->product_id, $check)): ?> 
     ... 
Смежные вопросы