【问题标题】:Display the Name of Table using the ID of another table in Laravel Eloquent在 Laravel Eloquent 中使用另一个表的 ID 显示表的名称
【发布时间】:2017-07-19 11:28:46
【问题描述】:

拜托,我的控制器中有一个功能。 我想查询库存表以选择product_id 的列表,在select 之后,它应该转到产品表向用户显示产品的NAME 而不是product_id

public function getStockList()
{
    $stock = DB::table("stocks")->pluck("product_id","product_id")->all();
    $products = DB::table("products")->pluck("name")->where('id', $stock);
    return view('shop.shop')->with(['stocks' => $stocks, 
    'stock' => $stock, 'products' => $products]);
}

我的 PHP 刀片有

{!! Form::select
(
    'stock',
    ['' => 'Select'] +$stock,'',
    array(
        'class'=>'form-control',
        'id'=>'country',
        'style'=>'width:350px;'
        )
)!!}

{!! Form::select
(
    'product_id',
    [''=>'Select Supplier'] + $products, null, 
    ['class'=>'form-control']
)!!}

基本上,我不希望向用户显示product_id,而是向用户显示产品名称。

【问题讨论】:

  • 你可以尝试加入产品表
  • 嗨 Meera Tank,我的应用有点复杂,因为我使用 jquery 根据用户选择的 product_id 自动填充其他字段。因此,当我使用 $stocks = DB::table('products')->join('stocks', 'products.id', '=', 'stocks.product_id') ->select('products.name', 'stocks.product_id')->get(); 时,我确实得到了相同的结果。这就是我尝试使用上述方法的原因。

标签: php mysql laravel laravel-5 eloquent


【解决方案1】:

试试这个

public function getStockList()
{
    $stock = DB::table("stocks")->pluck("product_id");
    $products = DB::table("products")->whereIn('id', $stock)->pluck("name","id");
    return view('shop.shop')->with([
        'stocks'   => $stocks,
        'stock'    => $stock,
        'products' => $products
    ]);
}

将您的产品列表选择框替换为以下内容

{!! Form::select('product_id',$products,null, ['class'=>'form-control','placeholder'=>'Select Products'])!!}

【讨论】:

  • 谢谢哈桑,当我返回 $stock 时,我得到 [1,1,3,4,4] 的数组,当我返回 $products 时,我得到空数组 []。希望你能理解。 $products 应该在 products 表中显示名称数组。等待您的亲切回复
  • 请确认 [1,1,3,4,4] 是您的产品 ID,并且您的 stock 表是否有多个相同产品的库存? @史蒂夫
  • 是的 [1,1,3,4,4] 是 stock 表中的 product_id!我的库存表有多个相同产品的库存,因为它们是不同供应商的供应商。
  • 谢谢哈桑,当我返回 $products {"1":"Station","3":"Module","4":"Reader"} which I think its okay BUT when I view the blade {!! Form::select('product_id', [''=>'Select Supplier'] + $products, null, ['class'=>'form-control'])!!}.` 我得到了不支持的操作数类型
  • 问题出在您的刀片文件中。检查我更新的答案@Steve
【解决方案2】:

你需要数组来传递表单

/* $product_array = ['1' => 'product 1',  '2' => 'product 2', '3' => 'product 3']; */

所以在你的控制器中

$product_array = []
  foreach($products as $product){
    $product_array[$product->id] = $product->name;
  }

return view('shop.shop')->with(['stocks' => $stocks, 
'stock' => $stock, 'products' => $products , 'product_array'=>$product_array]);

在你看来

{{!! Form::select('product_id', $product_array , null, ['class'=>'form-control'])!! }}

希望这会有所帮助。

【讨论】:

  • 坦克,你的意思是我应该这样写吗? ` public function getStockList() { $stocks = Stock::all()->Where('quantity', '>', '0'); $stock = DB::table("stocks")->pluck("product_id", "product_id")->all(); $products = DB::table("products")->pluck("name")->where('id', $stock); $product_array = []; foreach ($products as $product) { $product_array[$product->id] = $product->name; } return view('shop.shop')->with(['stocks' => $stocks, 'stock' => $stock, 'products' => $products, 'product_array' => $product_array]); } `
  • @Steve 我只想说你需要在选择中传递 id 和 name 数组来显示名称。
猜你喜欢
  • 2019-02-07
  • 1970-01-01
  • 2015-07-03
  • 2020-06-06
  • 1970-01-01
  • 2015-07-02
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多