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。也许还有别的办法。