Php 如何在laravel中建立一对多关系

Php 如何在laravel中建立一对多关系,php,laravel-5,laravel-5.1,Php,Laravel 5,Laravel 5.1,我正在尝试使用雄辩的模型建立一对多的关系,并希望展示指定类别中的产品 这就是我的产品型号: <?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\softDeletes; class Product extends Model { use softDeletes; protected $table='products'; pu

我正在尝试使用雄辩的模型建立一对多的关系,并希望展示指定类别中的产品 这就是我的产品型号:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\softDeletes;

class Product extends Model
{
    use softDeletes;
    protected $table='products';

    public function category(){
        return $this->belongsTo('App\Category');
    }
}
这是分类表:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('category_id');
        $table->string('describtion');
        $table->string('image_name');
        $table->timestamps();
        $table->softDeletes();
    });
}
public function up()
{
    Schema::create('category', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
        $table->softDeletes();
    });
}
它给了我一个错误:对非对象调用成员函数category()


那我怎么解决呢

据我所知,你的问题是:

在控制器中:

$category = Category::find($id);
$products = $category->product;
$category = Category::with('product')->where('id', 1)->first();
更好的是,您可以使用“快速加载”,而不用手动分配产品:

控制器:

$category = Category::find($id);
$products = $category->product;
$category = Category::with('product')->where('id', 1)->first();

希望这对你有帮助

你能展示你的数据库表吗?你正确地浏览了吗?@user3514160是的,正如你在上面的问题中看到的,我使用它就像文档一样那么为什么你要传递
where
方法,而你已经将它定义为
belongsTo
关系?在文档中,我看不到任何地方可以为
belongsTo
关系传递
where
方法。我使用where将类别id与在url中传递的id进行比较。在这个例子中,我们没有从url获取类别id,因此无法获取正确的类别id?!!!还有,这些会写在category controller或product中吗?您在方法中传递的$id变量是category id,对吗?当用户点击类别时,您想显示每个类别的产品,对吗?因此,当用户单击category时,您会将category id传递给产品控制器并相应地获取产品列表。“当我尝试它时,会出现以下错误:尝试获取productsController.php第18行中的non-objectErrorException属性:尝试获取non-object属性,这是完全错误。”