我是Laravel新手。我只想问一下我的代码是否正确。我想通过Collection文件夹中index.blade.php中的某个分配来显示区域的楼层和建筑物的名称。集合属于工作分配,工作分配属于区域。
我在Collection index.blade.php中的代码
@foreach ($collections as $collection)
<tr>
<td>
{{ $collection->assignment->area['floor'] }} Floor
{{ $collection->assignment->area['building'] }}
</td>
<tr>
@endforeach
该代码生成错误“尝试获取非对象的属性”。所以我想问正确的显示方式。
这是模特
Collection.php
public function assignment()
{
return $this->belongsTo(Assignment::class);
}
Assignment.php
public function collections()
{
return $this->hasMany(Collection::class);
}
public function area()
{
return $this->belongsTo(Area::class);
}
Area.php
public function assignments()
{
return $this->hasMany(Assignment::class);
}
CollectionsController.php
public function index() //shows the table of the collections
{
$collections = Collection::all();
$disposals = Disposal::all();
return view('collections.index', compact('collections', 'disposals'));
}
答案 0 :(得分:1)
“更新”:问题来自未封闭的tr标记,您像这样
<tr><tr>
打开了它,但应该是<tr></tr>
:D就是这样,检查解决方案并告诉我是否可行。但是从好的方面来看,您的代码现在更加简洁实用:D
链接不好:),请尝试创建一个可以获取您所在区域的函数,否则...
或者您可以使用withDefault并返回相关模型的新实例
此外,您的数据库方案应如下所示:
收藏集
分配
但对于您的示例,我可以做:
Collection.php
public function assignment()
{
return $this->belongsTo(Assignment::class)
->withDefault();
}
Assignment.php
public function collections()
{
return $this->hasMany(Collection::class);
}
public function area()
{
return $this->belongsTo(Area::class)
->withDefault();
}
Area.php
public function assignments()
{
return $this->hasMany(Assignment::class);
}
CollectionsController.php
public function index() //shows the table of the collections
{
$collections = Collection::all();
$disposals = Disposal::all();
return view('collections.index', compact('collections', 'disposals'));
}
也用于用途:
@foreach ($collections as $collection)
<tr>
<td>
{{ $collection->assignment->area->floor }} Floor
{{ $collection->assignment->area->building }}
</td>
<tr/>
@endforeach
如果一切正常,但仍然没有结果,请检查数据本身是否存在,因此请检查集合中是否有任何赋值,或者是否有返回赋值的区域...
答案 1 :(得分:0)
您应该使用这样的区域
$collection->assignment()->area()->building
答案 2 :(得分:0)
以下内容的几乎任何部分都可能返回Object[] pdus = (Object[]) bundle.get("pdus");
message = new SmsMessage[pdus.length];
for(int i =0 ; i < message.length ; i++){
message[i] = SmsMessage.createFromPdu( (byte[]) pdus[i] );
messageAddress = message[i].getOriginatingAddress();
messageBody = message[i].getMessageBody().toString();
}
:
null
如果该特定Collection不存在从Collection到Assignment的关系,则将为其返回$collection->assignment->area
。
这将适用于所有null
关系。
您将需要检查这些内容,弄清楚如何在singular
的情况下返回一些默认值,或者确保该关系始终存在于数据库中。
答案 3 :(得分:0)
可能会出现错误,因为所有记录都没有将数据连接到子表中,以免发生错误。要克服错误,您可以使用optional()方法。
方法将自动处理null关系。
optional($collection->assignment)->area
有关更多信息,您可以检查此link 祝你好运