2016-11-21 380 views
7

我试图从一个posts数据库表中使用它的id获得记录。我一直在find()方法上抨击我的头,现在已经有一段时间了,对于它为什么不起作用感到困惑。这里是我的查询,看起来正确的给我,但没有工作:Eloquent:find()和where()用法laravel

$post = Post::find($id); 
$post->delete(); 

我很不情愿这样做:

$post = Post::where('id', $id); 
$post->delete(); 

和令人惊讶的是,它的工作,但我不知道怎么样。

我也知道,不像find()where()是一个查询生成器,所以我也可以使用这样的: Post::where('id', $id)->first()

关于方法的工作方式差别任何想法?

回答

7

您的代码看起来不错,但也有几件事情需要注意的:在主键

Post::find($id);行为,如果你做你的模型中设置主键比id以外的东西:

protected $primaryKey = 'slug'; 

然后find将通过该键搜索。

Laravel还预计,id到(如字符串),你需要在你的模型增加属性设置为false是一个整数,如果你使用的是其他东西比一个整数:

public $incrementing = false; 
3

要如果你的主键不是一个整数,你还需要告诉你的模型它是什么数据类型,通过在模型定义的顶部设置keyType。

public $keyType = 'string' 

锋理解任何在castAttribute()函数定义的类型,这作为Laravel 5.4的是:整数,浮点,字符串,布尔,对象,数组,集合,日期和时间戳。

这将确保您的主键正确转换为等效的PHP数据类型。