【问题标题】:Laravel - Name from foreign key doesn't show in my bladeLaravel - 外键名称未显示在我的刀片中
【发布时间】:2020-11-22 13:01:33
【问题描述】:

我正在制作一个项目,我在产品中使用商店的外键。外键有效,但是当我想使用 $product->shop_id->shop_name 在刀片中显示它时,它给出了一个空白点。我的外键名为“shop_id”。Product page without shop name

这是我的代码:

产品控制器:

public function getProduct()
{
   $products = DB::table('products')->inRandomOrder()->simplePaginate(15);

   return view('product', ['products' => $products]);
}

product.blade.php

 @foreach($products as $product)
            <div class="column4 ">
                <div class="box ProductPage">
                    <img src="{{$product->product_image}}" alt="" class="image image-full"/>
                    <h3>{{$product->product_name}}</h3>
                    <p>Inhoud: {{$product->product_volume}}</p>
                    <p><u>€{{$product->product_price}}</u></p>
                    <p>Winkel:{{$product->shop_id->shop_name}}</p>
                </div>
                <a href="{{$product->product_url}}" class="button button-small">Bekijk product</a>
            </div>

产品型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    /**
     * @var string
     *
     *
     */
    protected $table = 'products';

    /**
     * @var array
     *
     *
     */
    protected $fillable = [
        'product_name', 'product_volume', 'product_price', 'product_url', 'product_image',
    ];

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     *
     *
     */

    public function shop()
    {
        return $this->hasOne('App\Shop', 'shop_id');
    }

}

店铺模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Shop extends Model
{
    use HasFactory;

    /**
     * @var string
     *
     *
     */
    protected $table = 'shops';

    /**
     * @var array
     *
     *
     */
    protected $fillable = [
        'shop_name',
    ];

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function product()
    {
        return $this->belongsTo('App\Product', 'shop_id')->withDefault();
    }


}

【问题讨论】:

  • $product-&gt;shop_id 更改为 $product-&gt;shop
  • shopsproducts 表上的主键列名称是什么?它是默认的id 还是您已将其更改为其他内容? @daan-verweij

标签: php laravel eloquent


【解决方案1】:

您在关系声明中提供了错误的命名空间和键。您必须按照下面的示例进行更改才能使用这些方法

Product.php

public function shop()
{
    return $this->hasOne(Shop::class, 'shop_id', 'shop_id');
}

之后,您可以使用

访问产品商店
<p>Winkel: {{ $product->shop->shop_name }}</p>

【讨论】:

  • 谢谢您的回复,但是刀片中仍然没有显示店铺名称。
  • 也许shop_name 不是正确的列名?产品在数据库中有有效的店铺吗?向我展示你的 github 存储库以查看更多文件
  • 这是我的shop table,这是我的product table
  • 我更新了shop 关系,应用这些更改,现在一切正常。将问题标记为最佳,如果它会起作用。顺便说一句,您没有按照约定命名表列,因此 laravel 无法自动解决外键和所有者键名称
猜你喜欢
  • 2019-06-28
  • 2019-10-14
  • 2016-06-26
  • 2023-04-08
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多