Laravel Eloquent关联函数名称
P粉729198207
P粉729198207 2023-07-23 17:45:15
[PHP讨论组]

我有两个表,分别是"posts"和"categories"。"posts"和"categories"之间的关系是多对一。因此,"Post"类模型中的代码如下:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    use HasFactory;

    protected $guarded = ['id'];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

使用这段代码,应用程序成功运行。

问题是,当我尝试将类别函数名称更改为"categories",并且尝试像这样访问帖子的类别名称时:

Post::first()->categories->name, laravel give an error like this Attempt to read property "name" on null in D:BelajarProgramCODINGANLaravelapplicationcoba-laraveleval()'d code.

(edited

当Eloquent函数名称为"category"时,"Post::first()->category"返回帖子的类别。但是,当我尝试将函数名称更改为"categories"并使用"Post::first()->categories"进行访问时,它返回null。

)

我尝试将类别类模型中的Eloquent关联函数的名称更改为随机名称,但我仍然可以访问它,并且Laravel没有报错。类别类模型的代码如下:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;

class Category extends Model
{
    use HasFactory;
    protected $guarded = ['id'];

    public function posts(){
        return $this->hasMany(Post::class);
    }
}

有人可以帮我吗?为什么我可以更改类别类模型中的Eloquent函数名称,但无法在帖子类模型中更改?

P粉729198207
P粉729198207

全部回复(1)
P粉330232096

进行以下操作应该可以解决问题:

public function categories()
{
    return $this->belongsTo(Category::class, 'category_id', 'id');
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号