Laravel 5.4试图获得非对象的财产



我与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-一对多关系

还要结帐急切的加载(保存查询(,并且如果没有文档的别名存在,则应在尝试访问文档的属性之前检查文档是否存在。

最新更新