2017-01-02 47 views
4

我正在使用Gate facade来检查用户是否可以删除行。如果我输出$cons,则返回4Laravel pluck和findOrFail没有返回正确的行

4 2 1 Mr Joe Bloggs male 1234567 0 1_1474822931.png 2017-01-02 17:33:49 2017-01-02 17:33:49 NULL 

上面的第一列是主键,所以我们可以看到它应该返回这一行。

然而,在查询后输出$c_id,它表明:

#items: array:4 [▼ 
    0 => 1 
    1 => 1 
    2 => 1 
    3 => 2 
    ] 

我会一直期待它返回的2最后的结果,但它返回表中的所有4行!

即使我手动键入行的ID来获得:

$c_id = Cons::findOrFail(4)->pluck('c_id'); 

它仍然会返回所有行。

我知道我可以使用

$c_id = Cons::where('id', $cons)->pluck('c_id'); 

其中正常工作,但我正在关注的Laravel Gate例如,在FindOrFail抛出异常。

非常感谢。

回答

2

您不应该在findOrFail()之后使用pluck(),因为它只会运行查询从所有行中获取c_id。做这样的事情,而不是:

$c_id = Cons::findOrFail($cons)->c_id; 

如果你想使用pluck()某种原因,这样做:

$c_id = Cons::where('column', $cons)->pluck('c_id'); 
+1

完美的作品,并感谢您的解释!我可以在8分钟内接受答案。 – Ben