Laravel 5.5 find($ id)返回集合而不是单个对象

时间:2017-09-08 13:57:22

标签: laravel

Laravel 5.5 find($ id)返回集合而不是单个对象

知道为什么,以及如何防止这种情况?我必须使用->first()作为解决方法

public function destroy(client $client)
    {

        $item = Client::findOrFail($client)->first();
        $item->delete();

        session()->flash('message', 'Client deleted');

        return redirect('/clients');

    }

2 个答案:

答案 0 :(得分:10)

find()findOrFail()需要一个整数来返回一个元素。如果您传递其他内容,您将获得一个集合。

由于您要求将Client对象作为参数,因此您无需进行检查。当对象不存在时,Laravel永远不会触发此函数,因此您无需检查它。

public function destroy(Client $client)
{

    $client->delete();

    session()->flash('message', 'Client deleted');

    return redirect('/clients');

}

有关详细信息,请阅读https://laravel.com/docs/5.5/eloquent#retrieving-single-models以及not found exception

的以下部分

答案 1 :(得分:1)

当您输入提示时,

$client已经是Client的实例。你不应该再“找到”它。检查它是否存在然后运行delete就足够了。

public function destroy(client $client)
{

    if ($client->exists)
        $client->delete();

    session()->flash('message', 'Client deleted');

    return redirect('/clients');

}