从视图看,Laravel 5.3访问在elequant中有一个
我试图从控制器传入的数据集合访问关系表。我可以在视图中迭代集合,但无法访问关系数据 共有两个表格:从视图看,Laravel 5.3访问在elequant中有一个,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我试图从控制器传入的数据集合访问关系表。我可以在视图中迭代集合,但无法访问关系数据 共有两个表格: 股票(默认模型) 股票数据(具有已设置的外键股票id) 控制器: public function getstock() { return view('vehicles.getstock', ['stock' => \App\Stock::all()]); } 模型(App\Stock)然后(App\StockData) 查看(循环): @foreach ($st
- 股票(默认模型)
- 股票数据(具有已设置的外键股票id)
public function getstock() {
return view('vehicles.getstock', ['stock' => \App\Stock::all()]);
}
模型(App\Stock)然后(App\StockData)
查看(循环):
@foreach ($stock as $k => $v)
{{ print_r($v->stockdata()->get())->year }}
@endforeach
当我尝试下面的查询时,我得到一个
Undefined property: Illuminate\Database\Eloquent\Collection::$year (View: F:\websites\tempsite\resources\views\vehicles\getstock.blade.php)
但是,年份是stock_数据表中的一列
我还能够打印\App\StockData()表中的数据,因此对该表的引用是正确的,因为从控制器打印(\App\StockData::all())会按预期返回所有行
我做错了什么?在对任何关系调用get()
方法时,无论您有什么关系,您都将始终收到集合
至少有两(2)种方法可以解决您的问题:1. <代码>$v->stockdata->year
2. <代码>$v->stockdata()->first()->year 我建议您使用第一个,因为您的
stockdata
具有1:1的关系
祝你好运 既然是这样,你应该这样做:
@foreach ($stock as $v)
{{ $v->stockdata->year }}
@endforeach
例如:
Stock.php模型
class Stock extends Model
{
protected $primaryKey = 'id';
function stockdata() {
return $this->hasOne('App\StockDatas', 'id', 'stock_id');
}
public function getStock(){
return Stock::with('stockdata')->get();
}
}
控制者
public function getstock(Stock $stock) {
return view('vehicles.getstock', ['stock' => $stock->getStock]);
}
看法
首先,您必须更改
{{print\r($v->stockdata()->get())->year}
这一行,删除print\r。在foreach循环中的下一个循环中,您可以这样做
@foreach($stock as $one)
{{ $one->stockadata()->first()->year }}
@endforeach
为了获得更好的解决方案,您应该检查isset$one->stockadata()->first()
在那一年之后。最后,代码应该是这样的
@foreach($stock as $one)
{{ isset($one->stockadata()->first()) : $one->stockadata()->first()->year : 'Default' }}
@endforeach
谢谢:)我尝试了您的选项,但在这两个方面都出现了以下错误:在执行{print_r($v->stockdata->year)}或{print_r($v->stockdata()->first()->year)}@mauzilla刚刚注意到,
$this->hasOne('App\StockDatas',id',stock_id')中有错误的关系键代码>应该是$this->hasOne('App\StockDatas','stock_id','id')代码>,因为第一个键是外键,第二个键是本地键。谢谢:)我假设我做错了什么,因为所有的答案都指向同一件事,但我得到了一个“在执行{{print\u r($v->stockdata->year)}时尝试获取非对象的属性”每个股票都有它的相关股票数据吗?如果是,你能发布dd($v->stockdata)的结果吗
如果您将其作为foreach中的第一行。如果不是,您应该每次都进行检查,比如is\u null($v->stockdata)?:$v->stockdata->year
。
@foreach($stock as $one)
{{ $one->stockadata()->first()->year }}
@endforeach
@foreach($stock as $one)
{{ isset($one->stockadata()->first()) : $one->stockadata()->first()->year : 'Default' }}
@endforeach