我正在学习Laravel,并且正在尝试创建简单的在线商店。 我创建了表项目和金额。现在,我要显示所有具有库存量的项目,但是由于某种未知的原因,我无法将项目数量提取到项目中。
这些是我的表模式:
项目:
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->string('name', 120)->nullable(false);
$table->float('price',8,2)->unsigned()->nullable(false);
$table->longText('short_specification');
$table->longText('specification');
$table->longText('description');
$table->string('photo', 100);
$table->engine = 'InnoDB';
$table->foreign('category_id')->references('id')->on('categories');
});
金额:
Schema::create('amounts', function (Blueprint $table) {
$table->integer('item_id')->unsigned();
$table->integer('amount')->unsigned()->nullable(false);
$table->engine = 'InnoDB';
});
Schema::table('amounts',function($table){
$table->foreign('item_id')->references('id')->on('items');
$table->primary('item_id');
});
这些是我的模特:
项目:
class Item extends Model
{
public $timestamps = false;
function amount()
{
return $this->hasOne('App\Amount','item_id','id');
}
}
金额:
class Amount extends Model
{
function item()
{
//$this->belongsTo('App\Item');
return $this->belongsTo('App\Item','item_id','id');
}
}
当我这样做时:
$items = DB::table('items')->get();
dd($items);
return view('home')->with('items',$items);
项目正确显示,但项目数量不存在。 当我这样做时:
@foreach($items as $item)
{{ $item->id }}
{{ $item->amount }}
@endforeach
我知道了:
未定义属性:stdClass :: $ amount(视图:D:\ 2。 PROGRAMY \ xampp \ htdocs \ silicon_store \ resources \ views \ home.blade.php) 错误。
从我在网上看到的情况(我已经尝试修复了3个多小时,所以我必须做完全错误的事情),它应该可以正常工作,但是不能。
答案 0 :(得分:1)
通过$items = DB::table('items')->get();
,您正在使用查询构建器。除非您在查询中加入数量表,否则它将没有关系的值。
$items = DB::table('items')
->leftJoin('amounts', 'items.id', '=', 'amounts.item_id')
->get();
我认为您也可以使用口才查询。在这种情况下,每个$item
都是Item
模型的实例,而不是StdClass对象。
$items = App\Item::with('amount')->get();
答案 1 :(得分:0)