Laravel 4.2 oneToMany关系问题

时间:2015-04-13 09:31:44

标签: laravel laravel-4 eloquent

尽管已经实施了许多L4关系,但他们大部分时间都在工作。我很挣扎,出于某种原因看不出我哪里出错了。这几乎肯定是显而易见的。

关系是一个任务有一个主题,主题有很多任务。

任务模型

class Task extends Eloquent {


    protected $guarded = array();

    public static $rules = array(

    );

    public function resources()
    {
        return $this->belongsToMany('Resource');
    }


    public function topic()
    {
        return $this->belongsTo('Topic', 'topic_id');
    }

    }

主题模型

class Topic extends Eloquent {

    protected $guarded = array();

    public static $rules = array();


    public function tasks()
    {
        return $this->hasMany('Task');
    }

}

任务控制器

 public function show($id)
    {
        $task = $this->task->where('number', $id);

        return View::make('tasks.show', compact('task'));
    }

当我dd($ task)时,relations数组为空。

  

对象(任务)#688(21){[“guarded”:protected] =>数组(0){}   [ “连接”:保护] => NULL [“table”:protected] =>空值   [ “的PrimaryKey”:保护] => string(2)“id”[“perPage”:protected] =>   int(15)[“incrementing”] => bool(true)[“timestamps”] =>布尔(真)   [ “属性”:保护] => array(11){[“id”] => string(1)“9”   [ “数量”] => string(1)“6”[“topic”] => string(1)“2”[“topic_old”] =>   string(10)“War Effort”[“task”] => string(28)“你要我们收集   Moss?“[”objective“] => string(36)”收集信息包括   Q& A“[”method“] => string(29)”支持的历史研究“   [ “上下文”] => string(0)“”[“level”] => string(0)“”[“created_at”] =>   string(19)“0000-00-00 00:00:00”[“updated_at”] =>串(19)   “0000-00-00 00:00:00”} [“original”:protected] => array(11){[“id”] =>   string(1)“9”[“number”] => string(1)“6”[“topic”] => string(1)“2”   [ “topic_old”] => string(10)“War Effort”[“task”] => string(28)“你   希望我们收集莫斯?“[”objective“] =>字符串(36)”收集   信息包括Q& A“[”method“] => string(29)”支持   历史研究“[”context“] => string(0)”“[”level“] =>字符串(0)   “”[“created_at”] => string(19)“0000-00-00 00:00:00”[“updated_at”] =>   string(19)“0000-00-00 00:00:00”} [“relations”:protected] =>阵列(0)   {} [“hidden”:protected] => array(0){} [“visible”:protected] =>   array(0){} [“appends”:protected] =>数组(0){}   [ “可填充”:保护] => array(0){} [“dates”:protected] => array(0){   } [“touches”:protected] => array(0){} [“observables”:protected] =>   array(0){} [“with”:protected] =>数组(0){}   [ “morphClass”:保护] => NULL [“exists”] =>布尔(真)   [ “softDelete”:保护] => bool(false)}

1 个答案:

答案 0 :(得分:0)

您需要先调用您在模型中声明的关系。在这种情况下,我将使用Eager Loadingwith()函数。

$tasks = $this->task->where('number', $id)->with('topic');

来源:http://laravel.com/docs/4.2/eloquent#eager-loading

  

我想将变量更改为$tasks因为使用了   where(),你会立刻得到   Illuminate\Database\Eloquent\Collection(许多结果)

你可以查看结果。

dd($tasks->get());