Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 外键关系在雄辩中不起作用_Php_Mysql_Laravel_Eloquent_Blade - Fatal编程技术网

Php 外键关系在雄辩中不起作用

Php 外键关系在雄辩中不起作用,php,mysql,laravel,eloquent,blade,Php,Mysql,Laravel,Eloquent,Blade,我研究过这个答案: 还有这个 但还是不能解决我的问题。 我有两个模型:产品和类别,我想在我的刀片页面上显示产品数据及其类别[课程名称]。我知道可以通过将其添加到控制器中的返回数据来实现这一点,但是我希望使用Eloquent来实现这一点,但是我收到了错误 这是我的密码: 产品型号 protected $table = 'product_details'; public function category() { return $this->belongsTo('App\categor

我研究过这个答案:

还有这个

但还是不能解决我的问题。 我有两个模型:产品和类别,我想在我的刀片页面上显示产品数据及其类别[课程名称]。我知道可以通过将其添加到控制器中的返回数据来实现这一点,但是我希望使用Eloquent来实现这一点,但是我收到了错误

这是我的密码:

产品型号

protected $table = 'product_details';
public function category() {
    return $this->belongsTo('App\category', 'category_id');
}
protected $table = 'category';
public function product() {
    return $this->hasMany('App\product');
}
类别模型

protected $table = 'product_details';
public function category() {
    return $this->belongsTo('App\category', 'category_id');
}
protected $table = 'category';
public function product() {
    return $this->hasMany('App\product');
}
ProductController

public function index()
{
    $products = product::select('id', 'product_name', 'category_id', 'is_active', 'created_at', 'updated_at')->get();
    return view('admin/product/index', compact('products'));
}
索引刀片页面

{{ $product->category->category_name }}
表格

id
product_name
catgory_id
产品详细信息

id
product_name
catgory_id
类别

id
category_name
我得到的错误是:

正在尝试获取非对象的属性


可能您使用了错误的模型名称,默认情况下,模型名称为:

App\Foobar
将类别的“C”字母大写

protected $table = 'product_details';
public function category() {
    return $this->belongsTo('App\Category', 'category_id');
}
将产品的“p”字母大写

protected $table = 'category';
public function product() {
    return $this->hasMany('App\Product');
}

由于产品表中
Category\u id
的值为
null
或类别表中缺少的其他
id
值,因此缺少类别。您可以通过以下方式检查刀片中缺少的值:

{{ $product->category->category_name or 'Unknown Category' }}

这就是我对它的看法

  • 您正在使用get()检索您的产品,该产品将返回一个数组,因此要访问类别集合,您必须遍历每个产品以检索它的类别。如果只需要一种产品,可以使用first()

  • 我建议您使用即时加载来获取类别,以防止出现n+1查询问题。我认为在某种程度上,它还可以帮助防止试图获取非对象的属性。查询现在将被删除

    $products = product::with('category')->select('id', 'product_name', 'category_id', 'is_active', 'created_at', 'updated_at')->get();
    
  • 也可能是产品没有相关的类别记录,我认为如果您强制执行外键约束,这是不可能的。但如果是这种情况,您可以尝试php7 ull合并运算符

    {{ $product->category->category_name ?? 'Not Available'}}
    

  • 在控制器中,您写道:

    $products = product::select('id', 'product_name', 'category_id', 'is_active', 'created_at', 'updated_at')->get();
    
    但在您的刀片文件中,您正在调用:

    {{ $product->category->category_name }}
    
    您是否在blade文件中编写了一个foreach循环?例如:

    @foreach ($products as $product)
        {{ $product->category->category_name }}
    @endforeach
    
    否则,您应该先调用->而不是->获取并更正您的输入错误。因此,ProductController上的代码是:

    public function index()
    {
        $products = product::select('id', 'product_name', 'category_id', 'is_active', 'created_at', 'updated_at')->get();
        return view('admin/product/index', compact('products'));
    }
    
    {{ $product->category->category_name }}
    
    而刀片页面上的代码是:

    public function index()
    {
        $products = product::select('id', 'product_name', 'category_id', 'is_active', 'created_at', 'updated_at')->get();
        return view('admin/product/index', compact('products'));
    }
    
    {{ $product->category->category_name }}
    

    你能发布
    dd($product->category)
    的输出吗?我怀疑该值为null,可能是因为category_id为空或与category表不匹配