在laravel中加载时,关系数组为null

时间:2013-10-07 22:59:47

标签: php laravel laravel-4

我在laravel 4中急切加载时遇到了关系数组的问题,例如:

控制器:

         foreach (Apps::with('extra')->get() as $app)
         {
                 print_r($app->toArray());//returns array but my relationship array at the bottom  says null
                echo $app->extra; //this will show my relationship details

        }

模型:

class Apps extends Eloquent
{
    protected $connection = 'mysql_2';
    protected $table = 'apps';
    public $timestamps = false;
    protected $primaryKey = 'name';


     public function host()
     {
           return $this->belongsTo('Hosts','name');
     }

     public function extra()
     {
            $this->primaryKey='app_ip';
           return $this->hasone('Extra','ip');
     }

  //other functions below.......

}

class Extra extends Eloquent
{
    protected $connection = 'mysql_3';
    protected $table = 'extra';
    public $timestamps = false;
    protected $primaryKey = 'ip';

    public function app(){
            return $this->belongsTo('Apps', 'app_ip');
}

MySQL的:

我的mysql表不是通过以前存在的laravel创建的。 Apps表中的app_ip列与额外表中的ip列相关。它是一对一的关系,我在关系函数中指定了主键。我正在恢复关系,所以我知道它正在发挥作用。

当我直接调用函数时,我能够恢复关系数据,但是当我尝试打印完整数组时它没有显示关系数据。主要目标是能够在一个响应中返回关系列和应用列。

2 个答案:

答案 0 :(得分:0)

你需要这样做:

$apps = Apps::all();
$apps->load('extra');
foreach ($apps as $app)
{
   print_r($app->toArray()); // prints your relationship data as well
}

答案 1 :(得分:0)

你应该工作并迭代整个集合或使用 - > load()到急切负载应该没有什么区别。您是否在模型上使用可见限制?如果是这样,您将需要包含关系。

class Apps extends Eloquent {

    protected $visible = array(
        'id',
        'name',
        'created_at',
        'extra', // Make the relationship 'visible'
    );

    public function extra()
    {
        return $this->hasMany('Extra');
    }

}