我与Hasmany的关系有问题。这是我的代码:
在模型文档中,我有:
public function aliases()
{
return $this->hasMany('AppModelsAlias');
}
模型别名:
public function document()
{
return $this->belongsTo('AppModelsDocument');
}
在控制器中,我做了一个供您避免收集的信息:
$data['aliases'] = [];
$aliases = Alias::where('path', $directory)->get();
if(null != $aliases){
foreach($aliases as $alias){
$data['aliases'][] = $alias;
}
}
在视图中:
if(isset($data['aliases']))
@foreach($data['aliases'] as $alias)
<tr>
<td>{!! HTML::image('images/panel/icons/alias.svg', '', array('class' => 'icons_type')) !!}</td>
<td><a href="{{ route('documents.show', '', $alias->doc_id) }}">{!! $alias->document->name !!}</a></td>
<td>{{--{!! date('d-m-Y', strtotime($alias->document->date)) !!}--}}</td>
<td>{{--{!! $alias->document->class !!}--}}</td>
</tr>
@endforeach
@endif
问题是我尝试在视图中获取属性名称或关系文档的另一个属性槽:
$alias->document->name
控制器中的数据数组代码无法解决任何内容?您为什么要将集合(将ArrayAccess接口实现(转换为数组?
和设置:
$data['aliases'] = [];
此语句始终是正确的:
if(isset($data['aliases']))
您遇到的问题是您要从非对象请求名称,没有针对那里的别名。
我看到您在视图中使用$alias->doc_id
,我认为这是Docume Model Model of the doc_id doc_id不根据命名约定,并且不会自动解决。如果未定义,Laravel期望它为document_id
。您使用 doc_id
作为外键,这不是按照命名约定,因此必须定义它。
尝试以下操作:
public function aliases()
{
return $this->hasMany('AppModelsAlias', 'doc_id');
}
public function document()
{
return $this->belongsTo('AppModelsDocument', 'doc_id');
}
有关更多信息,请参见:Laravel-一对多关系
还要结帐急切的加载(保存查询(,并且如果没有文档的别名存在,则应在尝试访问文档的属性之前检查文档是否存在。