SQLSTATE [42S22]尝试加载

时间:2017-10-22 21:39:45

标签: php laravel eloquent eager-loading

我的网页目前需要5分钟才能加载。在最近的一篇文章后,我发现有近8000个查询调用,并且用户告诉我使用急切加载,所以我试图让它工作,但由于某种原因我不断收到错误。有谁知道我该如何解决这个问题?提前谢谢!

  

SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'shift_worker.schedule_id'(SQL:select * from shift_worker其中shift_workerschedule_id in( 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, 26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50, 51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, 76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100, 101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125, 126,127,128,129,130​​,131,132,133,134,135,136,137,138,139,140,​​141,142,143,144,145,146,147,148,149,150, 151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,19 2,193,194,195,196,197,198,199,200,201,202,203,205,205,206,207,208,209,210,211,212,213,214,215,216, 217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241, 242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266, 267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291, 292,293,294,295,296,29,298,299,300,301,302,303,304,305,306,307,30,30,303,310,311,312,313,314,315,316, 317,318,319))

这是我在视图中运行的代码:

<?php

$workers = \App\Schedule::with('shift_worker')->get();

foreach ($workers as $worker) {
    echo $worker->shift_worker;
}

以下是我的所有模型和表格:

工人模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Worker extends Model
{
   /**
    * The table associated with the model.
    *
    * @var string
    */

    protected $table = 'worker';
    protected $fillable = ['name'];

    public function shift_worker()
    {
        return $this->belongsToMany('App\ShiftWorker');
    }

}

工人表:

public function up()
{
    Schema::create('worker', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

班次模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Shift extends Model
{
/**
 * The table associated with the model.
 *
 * @var string
 */
    protected $table = 'shift';


    public function shift_worker()
    {
        return $this->belongsToMany('App\ShiftWorker');
    }
}

转换表:

public function up()
{
    Schema::create('shift', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('time');
        $table->string('type');
        $table->timestamps();
    });
}

ShiftWorker模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ShiftWorker extends Model
{
    protected $table = 'shift_worker';

    public function schedule(){
        return $this->belongsToMany('App\Schedule');
    }
}

ShiftWorker表:

public function up()
{
    Schema::create('shift_worker', function (Blueprint $table) {
        $table->increments('id');

        $table->integer('worker_id')->unsigned();
        $table->foreign('worker_id')->references('id')->on('worker')
            ->onDelete('cascade')->onUpdate('cascade');


        $table->integer('shift_id')->unsigned();
        $table->foreign('shift_id')->references('id')->on('shift')
            ->onDelete('cascade')->onUpdate('cascade');

        $table->boolean('monday');
        $table->boolean('tuesday');
        $table->boolean('wednesday');
        $table->boolean('thursday');
        $table->boolean('friday');
        $table->boolean('saturday');
        $table->boolean('sunday');

        $table->timestamps();
    });
}

日程表模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Schedule extends Model
{
    protected $table = 'schedule';

    public function shift_worker()
    {
        return $this->hasMany('App\ShiftWorker');
    }

    public function zone()
    {
        return $this->hasMany('App\Zone');
    }

}

日程表:

public function up()
{
    Schema::create('schedule', function (Blueprint $table) {
        $table->increments('id');

        //Assign workers shift_worker to
        $table->integer('shift_worker_id')->unsigned();

        //Zone they can work
        $table->integer('zone_id')->unsigned();

        $table->string('day');

        //Date the person can work
        $table->date('date');

        $table->timestamps();
    });
}

1 个答案:

答案 0 :(得分:1)

您对ShiftWorker模型的计划应该是belongsTo,因为您上面有shift_worker_id

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

该区域也应该是belongsTo关系

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

不检查其他模型中是否存在错误关系,您需要通过documentation和教程

检查出来并澄清您的概念