【问题标题】:Laravel 5.4 Trying to get property of non-objectLaravel 5.4 试图获取非对象的属性
【发布时间】:2017-11-05 22:30:02
【问题描述】:

我的关系有问题 hasMany。这是我的代码:

在模型文档中,我有:

public function aliases()
{
    return $this->hasMany('App\Models\Alias');
}

在模型别名中:

public function document()
{
    return $this->belongsTo('App\Models\Document');
}

在 Controller 中,我做了一个 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

问题是当我尝试在视图中获取属性名或关系document()的另一个属性槽时:

$alias->document->name

【问题讨论】:

    标签: php laravel-5 relationship


    【解决方案1】:

    您在控制器中的数据数组代码没有解决任何问题?为什么要将集合(实现 ArrayAccess 接口)转换为数组?

    通过设置:

    $data['aliases'] = [];
    

    这句话永远是正确的:

    if(isset($data['aliases']))
    

    您遇到的问题是您正在向非对象请求名称,那里没有别名的文档。

    我看到你在视图中使用$alias-&gt;doc_id,我假设这是Alias模型上的Document模型外键,doc_id不符合命名约定,不会自动解析。如果没有定义,Laravel 期望它是document_id。你使用doc_id作为外键,不符合命名约定,所以你必须定义它。

    试试这个:

    public function aliases()
    {
        return $this->hasMany('App\Models\Alias', 'doc_id');
    }
    
    
    
    
    public function document()
    {
        return $this->belongsTo('App\Models\Document', 'doc_id');
    }
    

    欲了解更多信息,请参阅:Laravel - One-to-many relationships

    还要检查预加载(保存查询),如果没有文档也可以存在别名,则在尝试访问文档的属性之前,您应该检查文档是否存在于您的 foreach 中。

    【讨论】:

    • 成功了!我虽然如果您在迁移中定义了其他外键而不是 Laravel 预期,您不需要在关系中定义它。我错了。谢谢罗伯特!我将集合转换为数组,因为如果不是,我无法直接获取属性:$alias->doc_id。也许还有其他方法。
    猜你喜欢
    • 2018-01-01
    • 2018-04-05
    • 2017-12-27
    • 1970-01-01
    • 2018-12-03
    • 2018-08-27
    • 2015-09-22
    • 2017-03-20
    • 2014-03-25
    相关资源
    最近更新 更多