错误调用数组 Laravel 上的成员函数 where()

问题描述 投票:0回答:1

我想对显示的数据进行过滤,但是当我向数据添加位置时出现问题。

未来的计划我想添加if isset $请求名称、日期等。但在这一点上受到限制。

谢谢您提前帮忙解答

    $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,
    ]);
php laravel eloquent
1个回答
0
投票

您正在尝试在数组中调用

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 的新手:

  1. 模型名称应该是单数而不是复数,因此模型类
    Matchs
    应该是
    Match
    。您团队模型的名称是
    Team
    是正确的。
  2. 避免使用
    toArray()
    ,因为你不需要它。当您调用
    get()
    时,它将返回集合对象,在大多数情况下,该对象比数组更具可读性和更强大。
  3. 我建议使用
    like
    使用
    whereHas
    的代码只有在您在
    team
    类中正确定义了
    Matchs
    关系时才有效。因此,在模型中定义关系也很重要。如果这样做,您甚至不需要
    for
    循环以及该循环中其他模型中的所有
    where
    。您可以在一个查询中完成所有关系的操作。
© www.soinside.com 2019 - 2024. All rights reserved.