Eloquent:find() 和 where() 用法 laravel
Eloquent: find() and where() usage laravel
我正在尝试使用其 ID 从 posts
数据库 table 中获取记录。一段时间以来,我一直在研究 find() 方法,对它为什么不起作用感到困惑。这是我的查询,看起来正确但没有用:
$post = Post::find($id);
$post->delete();
我不情愿地这样做了:
$post = Post::where('id', $id);
$post->delete();
令人惊讶的是,它有效,但我不知道如何。
我也知道与 find()
不同,where()
是一个查询生成器,所以我也可以这样使用它:
Post::where('id', $id)->first()
关于这些方法工作方式的差异有什么想法吗?
您的代码看起来不错,但有几点需要注意:
Post::find($id);
作用于主键,如果你在你的模型中将你的主键设置为 id
以外的东西,方法是:
protected $primaryKey = 'slug';
然后 find
将改为按该键搜索。
Laravel 也期望 id
是一个整数,如果您使用的不是整数(例如字符串),您需要将递增的 属性 设置为你的模型为假:
public $incrementing = false;
要添加到 craig_h 上面的评论(我目前没有足够的代表将此作为评论添加到他的回答中,抱歉),如果您的主键不是整数,您您还想通过在模型定义的顶部设置 keyType 来告诉您的模型它是什么数据类型。
public $keyType = 'string'
Eloquent 理解 castAttribute()
函数中定义的任何类型,截至 Laravel 5.4 是:int、float、string、bool、object、array、collection、date和时间戳。
这将确保您的主键正确转换为等效的 PHP 数据类型。
未找到异常
有时您可能希望在未找到模型时抛出异常。这在路由或控制器中特别有用。 findOrFail
和 firstOrFail
方法将检索查询的第一个结果。但是,如果没有找到结果,将抛出一个 Illuminate\Database\Eloquent\ModelNotFoundException
:
$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
如果未捕获异常,将自动向用户发送回 404 HTTP 响应。使用这些方法时,无需对 return 404 响应编写显式检查:
Route::get('/api/flights/{id}', function ($id) {
return App\Flight::findOrFail($id);
});
我正在尝试使用其 ID 从 posts
数据库 table 中获取记录。一段时间以来,我一直在研究 find() 方法,对它为什么不起作用感到困惑。这是我的查询,看起来正确但没有用:
$post = Post::find($id);
$post->delete();
我不情愿地这样做了:
$post = Post::where('id', $id);
$post->delete();
令人惊讶的是,它有效,但我不知道如何。
我也知道与 find()
不同,where()
是一个查询生成器,所以我也可以这样使用它:
Post::where('id', $id)->first()
关于这些方法工作方式的差异有什么想法吗?
您的代码看起来不错,但有几点需要注意:
Post::find($id);
作用于主键,如果你在你的模型中将你的主键设置为 id
以外的东西,方法是:
protected $primaryKey = 'slug';
然后 find
将改为按该键搜索。
Laravel 也期望 id
是一个整数,如果您使用的不是整数(例如字符串),您需要将递增的 属性 设置为你的模型为假:
public $incrementing = false;
要添加到 craig_h 上面的评论(我目前没有足够的代表将此作为评论添加到他的回答中,抱歉),如果您的主键不是整数,您您还想通过在模型定义的顶部设置 keyType 来告诉您的模型它是什么数据类型。
public $keyType = 'string'
Eloquent 理解 castAttribute()
函数中定义的任何类型,截至 Laravel 5.4 是:int、float、string、bool、object、array、collection、date和时间戳。
这将确保您的主键正确转换为等效的 PHP 数据类型。
未找到异常
有时您可能希望在未找到模型时抛出异常。这在路由或控制器中特别有用。 findOrFail
和 firstOrFail
方法将检索查询的第一个结果。但是,如果没有找到结果,将抛出一个 Illuminate\Database\Eloquent\ModelNotFoundException
:
$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
如果未捕获异常,将自动向用户发送回 404 HTTP 响应。使用这些方法时,无需对 return 404 响应编写显式检查:
Route::get('/api/flights/{id}', function ($id) {
return App\Flight::findOrFail($id);
});