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 列相关。这是一对一的关系,我在关系函数中指定了主键。我正在恢复关系,所以我知道它正在起作用。

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

4

2 回答 2

0

你需要这样做:

$apps = Apps::all();
$apps->load('extra');
foreach ($apps as $app)
{
   print_r($app->toArray()); // prints your relationship data as well
}
于 2013-10-08T01:24:39.457 回答
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');
    }

}
于 2013-10-08T04:57:17.297 回答