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属性,这是完全错误。”