【问题标题】:Get object depending on other object within for-loop in Laravel根据Laravel for循环中的其他对象获取对象
【发布时间】:2023-04-02 09:30:03
【问题描述】:

我有一个简单的 Laravel 应用程序,在 1 页上显示了来自数据库的表。

像这样:

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

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

我已经读到,在“视图”中编写这种编码并不整洁。但我不知道如何在控制器类中执行此类操作,因为我的方法是在 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);
     }

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

【问题讨论】:

标签: php arrays for-loop laravel foreach


【解决方案1】:

使用belongsTo-relationship

在您的Case-model 中,添加以下方法:

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')-&gt;get();

现在,要获取有关案例所属用户的信息,您可以简单地执行 $case-&gt;user-&gt;firstname 或任何您的列名。所以,在你原来的刀片示例的基础上,你会做这样的事情:

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

【讨论】:

  • 好答案。只是不要忘记eager load 的关系。 UserCase::with('user')-&gt;get();
  • 谢谢!我的英雄!
  • 没有同性恋?所以这一切——氨纶套装、防毒面具——都白费了!?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2023-02-23
  • 2021-11-25
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多