我目前想拥有3个数据库表,因此需要这样的模型:
现在我有3个型号“Stock”,“StockProducts”和“StockProductsAmount”。 StockProductsAmount在StockProducts和StockProductsAMount的ID上有2个外键。
我如何定义关系?在App \ StockProductsAmount中我已经定义了这个:
class StockProductsAmount extends Model
{
public function stock() {
return $this->hasOne('App\Stock');
}
public function stockproduct() {
return $this->hasOne('App\StockProducts');
}
}
我是否还需要在其他任何地方定义hasMany
- 关系?但在哪里?
另外,如何在一个视图中访问这3个表中的值?
这就是我现在所拥有的。注释掉的值是我在定义Eloquent关系后开始的。
public function stockOverview()
{
$products = StockProducts::all();
$stocks = Stock::all();
$amounts = StockProductsAmount::all();
//$stock = StockProductsAmount::all()->with('stock')->with('stockproducts');
$data = array(
'stocks' => $stocks,
'products' => $products,
'amount' => $amounts
);
return view('stock.overview')->with($data);
}
提前谢谢。
编辑:表格的结构:
股票:
Schema::create('stocks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('color1');
$table->string('color2');
$table->timestamps();
});
库存_产品:
Schema::create('stock_products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
库存产品金额:
Schema::create('stock_products_amounts', function (Blueprint $table) {
$table->increments('id');
$table->integer('fk_stock')->unsigned();
$table->foreign('fk_stock')->references('id')->on('stocks');
$table->integer('fk_stockproduct')->unsigned();
$table->foreign('fk_stockproduct')->references('id')->on('stock_products');
$table->integer('amount');
$table->timestamps();
});
答案 0 :(得分:0)
根据您的表格结构,它似乎是表格 - 股票和 Stock_Products 与表有多对多关系 - Stock_Products_Amount 充当存储两个表的id值的数据透视表。
你的模特可以拥有像 -
这样的关系股票模型 -
public function Products() {
return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct');
// Product Model ^ name of pivot table ^
}
产品型号 -
public function stocks() {
return $this->belongsToMany('App\Stock', 'Stock_Products_Amount ', 'fk_stockproduct', 'fk_stock');
}
现在您可以使用上面的功能一起检索所有值。
获取额外列的值使用withPivot()
。例如。获取amount
列的值将其用作 -
public function Products() {
return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct')->withPivot("amount");
// Product Model ^ name of pivot table ^
}
要一起查看视图中的内容,请定义一个函数,例如(getProducts)并获取此类视图的所有产品 -
股票模型 -
public function Products() {
return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct')->withPivot("amount");
// Product Model ^ name of pivot table ^
}
public function getProducts() {
return $this->Products()->get();
// ^ this is defined above
}
现在在控制器中你只需要获得所有股票并将它们发送到视图 -
public function stockOverview()
{
$stocks = Stock::all();
return view('stock.overview')->with($stocks);
}
现在你可以看到这样的一切 -
<!-- list of all stocks -->
@foreach($stocks as $stock)
{{$stock}}
<!-- list of products for that stock -->
@foreach($stock->getProduct() as $Product)
<!-- ^ this is the function we declared above in model -->
{{$Product}}
@endforeach
@endforeach
注意 - 检查正确的型号和属性名称,因为我刚刚给出了一个想法。也可以使用带有withPivot()的正确列。