Laravel检查记录是否存在

我刚来拉拉维尔。如何查找是否存在记录?

$user = User::where('email', '=', Input::get('email'));

我在这里可以做什么来查看$user是否有记录?

781952 次浏览

这取决于您是想在之后使用用户,还是只检查是否存在一个用户。

如果用户对象存在,你想使用它:

$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
// user doesn't exist
}

如果你只是想检查一下

if (User::where('email', '=', Input::get('email'))->count() > 0) {
// user found
}

或者更好

if (User::where('email', '=', Input::get('email'))->exists()) {
// user found
}

最好的解决方案之一是使用firstOrNewfirstOrCreate方法。文档有更多关于两者的详细信息。

要知道是否有记录是很简单的

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";

这是一个简单的代码来检查电子邮件是否存在数据库



$data = $request->all();
$user = DB::table('User')->pluck('email')->toArray();
if(in_array($user,$data['email']))
{
echo 'existed email';
}


在你的控制器中

$this->validate($request, [
'email' => 'required|unique:user|email',
]);

在您的视图-显示已经存在的消息

@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>\{\{ $error }}</li>
@endforeach
</ul>
</div>
@endif
$user = User::where('email', request('email'))->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
if($user->isEmpty()){
// has no records
}
Eloquent使用集合。 请参见以下链接:https://laravel.com/docs/5.4/eloquent-collections

如果你想插入一个唯一的记录,你可以使用laravel验证:

$validated = $request->validate([
'title' => 'required|unique:usersTable,emailAddress|max:255',
]);

但是你也可以用这些方法:

1:

if (User::where('email',  $request->email)->exists())
{
// object exists
} else {
// object not found
}

2:

$user = User::where('email',  $request->email)->first();


if ($user)
{
// object exists
} else {
// object not found
}

3:

$user = User::where('email',  $request->email)->first();


if ($user->isNotEmpty())
{
// object exists
} else {
// object not found
}

4:

$user = User::where('email',  $request->email)->firstOrCreate([
'email' => 'email'
],$request->all());
if (User::where('email', Input::get('email'))->exists()) {
// exists
}

这将检查表中是否存在特定的电子邮件地址:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
// Input::get('email') exist in the table
}

if语句中检查null可以防止Laravel在查询结束后立即返回404。

if ( User::find( $userId ) === null ) {


return "user does not exist";
}
else {
$user = User::find( $userId );


return $user;
}

如果找到用户,它似乎会运行双重查询,但我似乎找不到任何其他可靠的解决方案。

Laravel 5.6.26v

通过主键(电子邮件或id)查找现有记录

    $user = DB::table('users')->where('email',$email)->first();

然后

      if(!$user){
//user is not found
}
if($user){
// user found
}

包括“use DB”和表名user变成复数,使用上面的查询,就像user变成users

最短工作选项:

// if you need to do something with the user
if ($user = User::whereEmail(Input::get('email'))->first()) {


// ...


}


// otherwise
$userExists = User::whereEmail(Input::get('email'))->exists();
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
// user doesn't exist
}

可以写成

if (User::where('email', '=', Input::get('email'))->first() === null) {
// user doesn't exist
}

这将返回true或false,而不分配临时变量,如果这是你在原始语句中使用$user的全部目的。

if ($u = User::where('email', '=', $value)->first())
{
// do something with $u
return 'exists';
} else {
return 'nope';
}

可以用try/catch吗

->get()仍然返回一个空数组

我认为下面的方法是达到同样目的的最简单的方法:

    $user = User::where('email', '=', $request->input('email'))->first();
if ($user) {
// user doesn't exist!
}

创建下面的方法(为自己),以检查给定的记录id是否存在于Db表中。

private function isModelRecordExist($model, $recordId)
{
if (!$recordId) return false;


$count = $model->where(['id' => $recordId])->count();


return $count ? true : false;
}


// To Test
$recordId = 5;
$status = $this->isModelRecordExist( (new MyTestModel()), $recordId);

有帮助!

if (User::where('email', 'user@email.com')->first()) {
// It exists
} else {
// It does not exist
}

如果只需要检查是否存在,请使用first(),而不是count()

first(),因为它检查单个匹配,而count()计数所有匹配。

这将检查用户表中是否存在所请求的电子邮件:

if (User::where('email', $request->email)->exists()) {
//email exists in user table
}
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif

在laravel雄辩中,有默认的exists()方法,参考下面的例子。

if (User::where('id', $user_id )->exists()) {
// your code...
}

最简单的方法

    public function update(Request $request, $id)
{




$coupon = Coupon::where('name','=',$request->name)->first();


if($coupon->id != $id){
$validatedData = $request->validate([
'discount' => 'required',
'name' => 'required|unique:coupons|max:255',
]);
}




$requestData = $request->all();
$coupon = Coupon::findOrFail($id);
$coupon->update($requestData);
return redirect('admin/coupons')->with('flash_message', 'Coupon updated!');
}

Laravel 6或顶部:写表名,然后给出实例(“id”,请求- > id)的where子句条件

 public function store(Request $request)
{


$target = DB:: table('categories')
->where('title', $request->name)
->get()->first();
if ($target === null) { // do what ever you need to do
$cat = new Category();
$cat->title = $request->input('name');
$cat->parent_id = $request->input('parent_id');
$cat->user_id=auth()->user()->id;
$cat->save();
return redirect(route('cats.app'))->with('success', 'App created successfully.');


}else{ // match found
return redirect(route('cats.app'))->with('error', 'App already exists.');
}


}

检查记录是否存在的有效方法必须使用is_null方法来检查查询。

下面的代码可能会有帮助:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
//user does not exist...
}else{
//user exists...
}

简单,舒适和可理解的验证器

class CustomerController extends Controller
{
public function register(Request $request)
{


$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:customers',
'phone' => 'required|string|max:255|unique:customers',
'password' => 'required|string|min:6|confirmed',
]);


if ($validator->fails()) {
return response(['errors' => $validator->errors()->all()], 422);
}

我解决了这个问题,使用empty()函数:

$user = User::where('email', Input::get('email'))->get()->first();
//for example:
if (!empty($user))
User::destroy($user->id);

如果你想在数据库中插入一条记录,而相同邮件的记录不存在,那么你可以这样做:

$user = User::updateOrCreate(
['email' => Input::get('email')],
['first_name' => 'Test', 'last_name' => 'Test']
);

updateOrCreate方法的第一个参数列出了在关联表中唯一标识记录的列,而第二个参数由要插入或更新的值组成。

你可以在这里查看文档:Laravel upserts医生

$userCnt     = User::where("id",1)->count();
if( $userCnt ==0 ){
//////////record not exists
}else{
//////////record exists
}

注:其中条件根据您的要求。

你已经看到了很多解决方案,但是神奇的检查语法可以是这样的,

$model = App\Flight::findOrFail(1);


$model = App\Flight::where('legs', '>', 100)->firstOrFail();

当没有找到任何相关模型时,它会自动引发一个响应404的异常,有时你可能希望在没有找到模型时抛出一个异常。这在路由或控制器中特别有用。fingernail和firstOrFail方法将检索查询的第一个结果;然而,如果没有找到结果,则会抛出Illuminate\Database\Eloquent\ModelNotFoundException

裁判:https://laravel.com/docs/5.8/eloquent#retrieving-single-models

这有点晚了,但它可能会帮助那些试图使用User::find()->exists()记录存在的人,因为Laravel对find()where()方法显示了不同的行为。假设电子邮件是你的主键,让我们来看看这种情况。

$result = User::find($email)->exists();

如果存在该电子邮件的用户记录,则返回true。然而,令人困惑的是,如果不存在该电子邮件的用户,那么它将抛出一个错误。即

Call to a member function exists() on null.

但是where()的情况是不同的。

$result = User::where("email", $email)->exists();

如果记录存在,上面的子句将给出true,如果记录不存在,则给出false。因此,总是尝试使用where()来表示记录是否存在,而不是find()来避免NULL错误。

  1. 简单地使用这个来获得真或假

    $ user =用户::(“电子邮件”、“=”,输入::('邮件'))→存在();

  2. 如果你想要$user的结果,你可以使用这个,

    $ user =用户::(“电子邮件”、“=”,输入::('邮件'))→();

像这样检查结果,

if(count($user)>0){}
  1. 其他的你可以用这个,

    $ user =用户::(“电子邮件”、“=”,输入::('邮件'));

    < p > if ($ user→存在()){ $user = $user >get(); } < / p >