根据Laravel中for循环中的其他对象获取对象

时间:2015-01-26 13:37:15

标签: php arrays for-loop laravel foreach

我有这个简单的Laravel应用程序,在1页面上显示了一个表格。

像这样:

  @foreach ($cases in $case)
    {{ $case->title }}
    {{ $case->description }}
  @endforeach

只有一件事我无法工作。每个案例都归用户所有,因此我的数据库表就是“案例”。包含一个名为' owner_id'的列。我想显示' User'拥有' Case'对象

我已经读过,在“视图”中写下这种编码并不是很整洁。但我不知道如何在控制器类中做这样的事情因为我的方法是在for循环中做到这一点

在我尝试组合2个对象之前,我可以访问用户和案例对象的属性

$cases = DB::table('cases')->get();

    $userCases = array();

    for ($i=0; $i < count($cases); $i++) {
        $case = $cases[$i];

        $user = DB::table('users')->where('id', $case->owner_id)->first();

        array_push($userCases, array($case, $user);
     }

但这似乎不起作用,因为数组只用指针填充。

1 个答案:

答案 0 :(得分:3)

使用belongsTo-relationship

在您的Case模型中,添加以下方法:

app/models/UserCase.php:
<?php 
class UserCase extends \Eloquent // "Case" is reserved in PHP, so we use a custom name
{
    protected $table = 'cases';
    //....
    public function user() // you could call it owner or whatever
    {
        return $this->belongsTo('User', 'owner_id');    

    }
}

现在,在提取案例时,请不要使用直接查询,而应使用$cases = UserCase::all()。出于性能原因,您需要加载User模型,以便每次访问循环中的用户信息时都不会查询数据库。所以实际负载:$cases = UserCase::with('user')->get();

现在,要获取有关案例所属用户的信息,您只需执行$case->user->firstname或列名即可。因此,基于原始刀片示例,您可以执行以下操作:

   @foreach ($cases in $case)
        {{ $case->user->firstname }}
        {{ $case->title }}
        {{ $case->description }}
    @endforeach