繁体   English   中英

在Laravel中检索相关模型

[英]Retrieving related models in Laravel

我想从数据库中列出所有活动及其关系。 这是现在的代码。

Campaign.php

        public function task(){
            return $this->hasMany('Task','campaign_id');
        }
    }
?>

Task.php

        public function campaign(){
            return $this->belongsTo('Campaign','campaign_id');
        }
    }
?>

和页面控制器

public function campaigns(){
    return View::make('pages.platform.campaigns')
    ->with('campaigns', Campaign::all());
}

在这种情况下,我这样做:

<pre>
    @foreach($campaigns as $c)
        <? print_r($c) ?>
    @endforeach
</pre>

我看不到关系

[relations:protected] => Array()

我如何访问此相关模型,以便可以像它们一样回显它们

$c['name'] // Name field in Campaign table
$c['task']['name'] // Name field in related Task table

就这么简单:

foreach ($campaigns as $campaign)
{
  $campaign->name; // campaign model property

  foreach ($campaign->task as $task) // $campaign->task is a collection (hasMany relation)
  {
    $task; // related Task model
    $task->name; // with accessible all its properties
  }
}

但以上内容将导致foreach循环中每个广告系列的数据库查询,因此在您的控制器中进行更改:

->with('campaigns', Campaign::all());
// to this:
->with('campaigns', Campaign::with('task')->get());

with()方法负责快速加载-请务必检查。 http://laravel.com/docs/eloquent#eager-loading

然后,我建议对关系本身适当地调用您的关系,所以对belongsTo或hasOne来说是单数,对hasMany,belongsToMany,hasManyThrough等来说是复数。

话虽这么说,我会这样称呼你的关系:

// Campaign model
public function tasks()
{
  ...
}

然后,当然可以在with()方法中引用“任务”,而不是“任务”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM