【问题标题】:Using Laravel eloquent relationship (One to Many) returns NULL使用 Laravel 雄辩的关系(一对多)返回 NULL
【发布时间】:2014-10-23 03:22:20
【问题描述】:

当我使用 Laravel eloquent - 关系(一对多)时,结果为 NULL。 我已经在“work_hour”表中设置了数据,其中“workers_id”的值为 2,并且“workers”表中有一行 id=2 我按照文档“Laravel relationships

我的架构如下所示:

public function up()
    {
        Schema::create('work_hour', function($table){
            $table->increments('id');
            $table->integer('worked_hour');

            $table->time('worked_from');
            $table->time('worked_to');
            $table->integer('workers_id')->unsigned();
            $table->foreign('workers_id')->references('id')->on('workers');
            $table->integer('workday_id');
            $table->integer('offer_id');
        });
    }

PS:列 workday_id、offer_id 尚未设置为外部!

模型如下所示:

class Worker extends Eloquent{

    protected $fillable = ['first_name', 'last_name'];

}

class Workhour extends Eloquent{

    protected $table    = 'work_hour';

    public function worker(){
        return $this->belongsTo('Worker','workers_id');
    }

}

控制器 PS:我在SO上搜索过同样的问题,我尝试了一些意见,然后我将它们评论出来

class WorkerController extends BaseController {
    protected $table    = 'workers';
....
    public function show($id){
        $worker     = Worker::find($id);

    //  $workhour   = Workhour::where('workers_id','=',$worker->id)->get(); 
    // casting the result: works $workhour->toArray()

    //  $workhour   = Worker::find($id)->with('workhour')->get(); 
    //Call to undefined method Illuminate\Database\Query\Builder::workhour()

    //  $workhour   = Worker::with('workhour')->where('id',2)->get(); 
    //Call to undefined method Illuminate\Database\Query\Builder::workhour()

    $workhour   = Worker::find($id)->workhour; 
    // null

        dd($workhour);
        return View::make('worker.show',['worker' => $worker,'workhour'=>$workhour]);
    }

    public function workhour(){
      return $this->hasMany('Workhour','workers_id');
    }


}

我用“.../public/worker/2”调用“show.blade.php”(Laravel 4) 我究竟做错了什么?

【问题讨论】:

  • 为什么在你的控制器中定义了 Eloquent 关系(workhour() 方法和表名)?
  • 它返回null,因为Worker模型上没有定义关系。
  • @JarekTkaczyk_deczo_ 谢谢你,你说得对,我已将workhour() 函数添加到控制器中,不在模型中,谢谢!现在它完美地工作了,......你应该写下接受的答案
  • @kajetons 因为表名是“workers”,但模型是“Worker”
  • 我的意思是为什么它在控制器而不是你的 Eloquent 模型中。无论如何,现在应该解决了。

标签: php mysql laravel-4 eloquent foreign-key-relationship


【解决方案1】:

您只需将关系添加到模型而不是控制器:

class Worker extends Eloquent{

    protected $fillable = ['first_name', 'last_name'];

    public function workhour(){
      return $this->hasMany('Workhour','workers_id');
    }
}

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 2012-10-08
    • 2018-10-27
    • 2018-11-14
    • 2015-07-01
    • 2017-07-29
    • 2020-02-18
    • 2015-12-17
    • 2019-03-10
    相关资源
    最近更新 更多