如何修复Laravel急切加载无法使用自定义外键

时间:2019-03-31 19:25:47

标签: php laravel laravel-5.8

列表和Sub_Category具有一对多关系。列表属于一个sub_category,而sub_category有很多列表。

我的列表表'sub_catgory_id'上有一列,并且我在关系中也指定了外键

Listing.php Model
public function sub_category()
{
    return $this->belongsTo('App\Sub_Category', 'sub_category_id', 'id');
}

试图获取与子类别相关的所有列表

return $sub_category = \App\Sub_Category::with('listing')->get()

我收到此错误=>找不到列:1054“ where子句”中的未知列“ listings.sub__category_id”。

我知道有说服力的人正在检查sub__category_id(双下划线),但是我已经深入到这个项目中了,想将其保留为sub_category_id(单下划线)。关于如何实现的任何想法?

4 个答案:

答案 0 :(得分:0)

我终于找到解决办法。您可以驼峰化您的模型。因此,在我的情况下,我将模型从Sub_Category重命名为subCategory,以便雄辩地检查sub_category_id。

答案 1 :(得分:0)

我认为您应该设置为:

1 .Listening.php:

public function sub_category()
{
    return $this->belongsTo('App\Sub_Category', 'id', 'sub_category_id');
}

2.Sub_Category.php:

public function listing()
{
    return $this->belongsTo('App\Listening', 'sub_category_id','id');
}

通过设置laravel document中的关系,我们首先设置 foreign_key ,然后设置 local_key (例如,从laravel网站获得示例):

return $this->hasOne('App\Phone', 'foreign_key', 'local_key');

答案 2 :(得分:0)

您可以尝试以下代码:

1.Sub_Category.php(Model)

public function listimg() {
    return $this->belongsTo('App\Listening');
}

2.Contoller
$sub_category = \App\Sub_Category::with('listing')->get();

答案 3 :(得分:0)

对于自定义外键列,您已经为函数hasMany('Model', 'fk', 'pk')传递了两个附加参数,即外键列名称和参考键列名称。

class Category extends Model
{
    protected $table = 'categories';
    public function contents(){
        return $this->hasMany('App\Content', 'sub_cat_id', 'id');
    }
}
class Content extends Model
{
    //
    protected $table = 'contents';
    public function category(){
        return $this->belongsTo('App\Category');
    }
}

 Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('user_id');
            $table->integer('parent_id');
            $table->string('title');
            $table->timestamps();
        });

Schema::create('contents', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('app_id');
            $table->integer('cat_id');
            $table->bigInteger('sub_cat_id')->unsigned();
            $table->integer('content_type');
            $table->text('content');
            $table->text('title');
            $table->timestamps();
            $table->foreign('sub_cat_id')->references('id')->
            on('categories')->onDelete('cascade');

        });