为什么愿望清单中的数据无法显示

时间:2019-10-28 09:10:36

标签: php laravel

产品数据已存储在数据库中,但数据无法显示在愿望清单页面中。我该如何解决?

public function  wishList(Request $request)
{
    $products = wishlist::where('wishlist.pro_id','=','products.id')->get();
    return view('wishlist',compact('products'));
}

public function addWishList(Request $request){
    $wishList = new wishList;
    $wishList->user_id = Auth::user()->id;
    $wishList->pro_id = $request->pro_id;
    $wishList->save();
}

这是我要显示产品的愿望清单页面。 是无法从数据库中获取数据吗?

<tbody>
@forelse($products as $product)
<tr>
    <td>
        <img src="{{url('/assets/images/products')}}/{{\App\Product::findOrFail($product->product)->feature_image}}" alt="">
    </td>
    <td>
        /*product name*/
        <a href="{{url('/product',$product->id)}}">
        {{$product->title}}
        </a>
    </td>

</tr>

@empty
    <tr>
        <td colspan="6">
            <h3>Your WishList Is Empty</h3>
        </td>
    </tr>
@endforelse
<tr>
    <td colspan="4">
        <a href="{{url('/')}}" class="shopping-btn">{{$language->continue_shopping}}</a>
    </td>
</tr>
</tbody>

3 个答案:

答案 0 :(得分:1)

我认为问题出在愿望清单查询中:

$products = wishlist::where('wishlist.pro_id','=','products.id')->get();

这将产生sql查询

SELECT * FROM wishlist WHERE wishlist.pro_id = 'products.id'

它不会引发mysql异常,因为'products.id'是字符串,我不认为这是您想要的查询。

我认为您必须在products表上加入愿望清单,然后 使用whereRawwhere(DB::raw('...')查询生成器语法

whereRaw:

Wishlist::whereRaw('wishlist.pro_id = products.id')->get()

其中:

Wishlist::where(DB::raw('wishlist.pro_id = products.id'))->get()

答案 1 :(得分:0)

尝试使用@foreach代替@forelse

@foreach($products as $product)
    <tr>
        <td>
        <img src="{{url('/assets/images/products')}}/{{\App\Product::findOrFail($product->product)->feature_image}}" alt="">
        </td>
        <td>
        /*product name*/
        <a href="{{url('/product',$product->id)}}">
        {{$product->title}}
        </a>
        </td>

    </tr>
@endforeach

@else
    <tr>
    <td colspan="6">
       <h3>Your WishList Is Empty</h3>
    </td>
    </tr>
@endif

答案 2 :(得分:0)

首先,在执行查询的同一行中调用属性是一种不好的做法。另外,在控制器中,您在模板中将产品ID称为prod_id,而在模板中将其称为产品。

<tbody>
  @forelse($products as $product)
  <tr>
      <td>
          @php
           $prod = \App\Product::findOrFail($product->prod_id)) // prod_id not product
          @endphp
          @if($prod)
             <img src="{{url('/assets/images/products')}}/{{ $prod->feature_image }}" alt="">
          @endif
          </td>
      <td>
          /*product name*/
          <a href="{{url('/product',$product->id)}}">
          {{$product->title}}
          </a>
      </td>

  </tr>

  @empty
      <tr>
          <td colspan="6">
              <h3>Your WishList Is Empty</h3>
          </td>
      </tr>
  @endforelse
  <tr>
      <td colspan="4">
          <a href="{{url('/')}}" class="shopping-btn">{{$language->continue_shopping}}</a>
      </td>

  </tr>
</tbody>

我不确定您是否打算将$ product-> title用作愿望清单对象或在模板上创建的产品查询的一部分。如果您要查询产品查询,则将其余代码包含在if条件中,并使用$ prod-> title