错误调用数组 Laravel 上的成员函数 where()
Posted
技术标签:
【中文标题】错误调用数组 Laravel 上的成员函数 where()【英文标题】:Error Call to a member function where() on array Laravel 【发布时间】:2022-01-05 12:39:14 【问题描述】:我想从我显示的数据中进行过滤,但是当我在数据中添加位置时出现问题。
如果 isset $request name, date 和其他我想添加的未来计划。但在这一点上受到了限制。
感谢您提前帮忙解答
$matchs =Matchs::where('type', 'sparring')->where('status','Pending')->whereNull('deleted_at')->get()->toArray();
$data=[];
foreach ($matchs as $key)
$lawan = Matchs::where('id', $key['id'])->first()->ToArray();
$pertandingan = Sparring::where('match_id', $key['id'])->first()->ToArray();
$dua_arah = MatchTwoTeam::where('match_id', $key['id'])->first()->ToArray();
$tim = Team::where('id', $dua_arah['home_team'])->first()->ToArray();
$transfer['name']=$tim['name'];
$transfer['city']=$lawan['city'];
$transfer['field_cost']=$pertandingan['field_cost'];
$transfer['referee_cost']=$pertandingan['referee_cost'];
$transfer['logo_path']=$tim['logo_path'];
$transfer['nama_lapangan']=$lawan['nama_lapangan'];
$transfer['date']=$lawan['date'];
array_push($data,$transfer);
array_push($data,$pertandingan);
$data->where('name', 'LIKE', '%'.'football'.'%')->get()->toArray();
$data = array_search('football', array_column($data, 'name'));
$tittle="Sparring";
return view('mode.sparring',[
'tittle' => $tittle,
'data' => $data,
]);
【问题讨论】:
$data
是一个数组,但您尝试在其中调用where
。在循环中加载模型也是非常糟糕的做法/效率低下。您是否在 Matchs
模型中为 Sparring
和 MatchTwoTeam
设置了关系?
我没有,我用旧数据库创建了一个新项目。之前我在获取数据时遇到了问题(***.com/questions/70133457/…),希望你能帮助我这个初学者
【参考方案1】:
您试图在一个不可能的数组中调用where
。
正如您在代码的第一行中看到的,您正在模型类中调用where
方法。与Matchs::where('type', 'sparring')
一样,这是可能的,因为Matchs
是一个模型类。
现在,即使您使用数组,您也可以运行 where。您可以转换集合中的那一天,然后在该集合上使用数组。 如下:
collect($data)->where('name', 'football')->toArray();
这里collect()
将$data
数组转换为collectio,然后在collectio 中运行where()
方法,然后toArray()
将其改回数组。但不幸的是,集合类中没有like
运算符。在此处查看 Laravel 集合中可用方法的列表:https://laravel.com/docs/8.x/collections#available-methods
有一种方法可以做你想做的事。据我了解,您想要过滤 Matches
,其中 Team
名称中包含 footbal
。你可以这样做:
Matchs::where('type', 'sparring')
->where('status','Pending')
->whereNull('deleted_at')
->whereHas('team', function($team)
return $team->where('name', 'LIKE', '%'.'football'.'%')
)
->get()
->toArray();
所以,在这里我们可以得到唯一的Mathes
具有Team
的名称包含football
。
似乎你是 Laravel 的新手,对你的建议很少:
-
模型名称应该是单数而不是复数,所以模型类
Matchs
应该是Match
。您的团队模型名称是 Team
是正确的。
避免使用toArray()
,因为您不需要它。当您调用get()
时,它将返回集合对象,在大多数情况下,该集合比数组更具可读性和功能。
我建议使用like
和whereHas
的代码只有在您在Matchs
类中正确定义了team
关系时才有效。所以,在模型中定义你的关系也很重要。如果这样做,您甚至不需要 for
循环以及该循环中其他模型中的所有 where
。您可以在一个查询中完成所有关系。
【讨论】:
以上是关于错误调用数组 Laravel 上的成员函数 where()的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 5.2 更新到 5.3 后,调用数组上的成员函数 all()
使用 laravel 请求类时,在数组错误上调用成员函数失败()
在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”