Php Laravel 5.4尝试获取非对象的属性
我和很多人的关系有问题。这是我的代码: 在模型文档中,我有:Php Laravel 5.4尝试获取非对象的属性,php,laravel-5,relationship,Php,Laravel 5,Relationship,我和很多人的关系有问题。这是我的代码: 在模型文档中,我有: public function aliases() { return $this->hasMany('App\Models\Alias'); } 在模型别名中: public function document() { return $this->belongsTo('App\Models\Document'); } 在控制器中,我制作了一个foreach以避免收集: $data['aliases']
public function aliases()
{
return $this->hasMany('App\Models\Alias');
}
在模型别名中:
public function document()
{
return $this->belongsTo('App\Models\Document');
}
在控制器中,我制作了一个foreach以避免收集:
$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\u id
,我假设这是别名模型上的文档模型外键,doc\u id不符合命名约定,不会自动解析。如果没有定义,Laravel希望它是document\u id
。您使用doc\u id
作为外键,这不符合命名约定,因此您必须定义它
试试这个:
public function aliases()
{
return $this->hasMany('App\Models\Alias', 'doc_id');
}
public function document()
{
return $this->belongsTo('App\Models\Document', 'doc_id');
}
有关更多信息,请参阅:
此外,如果别名可以在没有文档的情况下存在,则在尝试访问文档属性之前,应先检查foreach中是否存在该文档。成功!我认为,如果您在迁移中定义了其他外键而不是Laravel,则不需要在关系中定义它。我错了。谢谢你,罗伯特!我转换数组中的集合,因为如果不是,我不能直接获取属性:$alias->doc\u id。也许还有别的办法。