【问题标题】:Accessing property from an array of records in Laravel从 Laravel 中的记录数组访问属性
【发布时间】:2017-09-25 13:41:21
【问题描述】:

我有一个这样定义的路线:

Route::get('/buyer_home', function(){
$senders = \App\Message::where(['to' => \Auth::guard('web_buyer')->user()->username])->distinct()->get(['from']);
$sellers = array();
foreach ($senders as $sender) {
    $sellers[] = \App\Seller::where('email', $sender->from)->get();
}
  return view('buyer.home', compact('sellers', 'senders'));
});

我需要在我的视图中访问sellers 表/模型的列/属性以建立这样的条件:@if(sender->from == seller->email)。但我得到了

此集合实例上不存在属性 [电子邮件]。

当我尝试在@foreach 循环中访问每个sellers 结果的email 属性时出现错误消息。我的意图是将sellers 的列表传递给视图,并且只有那些电子邮件与email 匹配的卖家从$sender->from 返回。我该如何解决这个问题?

编辑:

这是引发错误的我的视图代码的 sn-p:

<div class="list-group">
    @foreach($sellers as $seller)

       <a href="#" class="list-group-item">From: {{ $seller->email }}</a>

    @endforeach
</div>

【问题讨论】:

  • 你能在你的代码中指出它抛出这个错误的地方吗?
  • "collection instance" 让我认为您正在尝试访问作为 Laravel Collection 对象而不是特定卖方模型对象的对象的电子邮件属性。但我同意@FelippeDuarte,我们需要查看更多您的代码,特别是您收到此错误的行
  • 嗨,@FelippeDuarte 和 victor,我更新了问题

标签: php laravel eloquent


【解决方案1】:

我看到了问题。

$sellers 是一个集合数组。您应该将查询方式替换为whereIn

$emails = array_map(function($s) {
    return $s->from;
}), $senders);
$sellers = \App\Seller::whereIn('email', $emails)->get();

另一种方法是在您的视图中替换:

<a href="#" class="list-group-item">From: {{ $seller[0]->email }}</a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 2014-04-07
    • 2021-03-26
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多