我在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列相关。它是一对一的关系,我在关系函数中指定了主键。我正在恢复关系,所以我知道它正在发挥作用。
当我直接调用函数时,我能够恢复关系数据,但是当我尝试打印完整数组时它没有显示关系数据。主要目标是能够在一个响应中返回关系列和应用列。
答案 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');
}
}