ChatGPT解决这个技术问题 Extra ChatGPT

Laravel 检查记录是否存在

我是 Laravel 的新手。如何查找记录是否存在?

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

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

好的开始你需要在 $user 查询上执行 findOrFail() 或类似的
这并没有真正的帮助
那么它有什么作用呢?为什么没有帮助? $user = User::where('email', '=', Input::get('email')); 只是在 $user 中创建一个查询,您需要执行该查询。 findOrFail() 是执行该查询的一种方式。 get() 是另一种方式,firstOrFail() 是另一种方式
如果建议“没有真正帮助”,请尝试说明为什么它没有真正帮助,因为这样意味着我们知道如何改进/更改该建议
考虑这个i.imgur.com/ulqyOiw.png不需要重新发明轮子

L
Limon Monte

这取决于您是想事后与用户合作还是只检查是否存在。

如果要使用用户对象(如果存在):

$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
}

如果您针对不存在的记录调用 exists(),则会出现错误:Call to a member function exists() on null
@Volatil3 你做错了什么。运行查询后不能调用存在
@lukasgeiter 猜你是对的。我已经打电话给first()
我认为这是查找用户是否存在的更好方法。用户::where('email', '=', 'value')->count() > 0;
@Volatil3 我刚刚用 laravel 5.5 测试了 ->exists(),如果它不存在,它会说 false。
l
lucidlogic
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

这应该是公认的答案。最有效和专用的方法是通过 exists() 方法。
l
linktoahref

在 laravel eloquent 中,有默认的 exists() 方法,参考后面的例子。

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

C
Chuck Le Butt

最好的解决方案之一是使用 firstOrNewfirstOrCreate 方法。 documentation 对两者都有更多详细信息。


虽然不适合这个问题,但仍然非常有用的功能。两者之间的区别在于 firstOrNew 实例化了模型的一个实例,而 firstOrCreate 会立即保存查询的模型,因此您需要更新 firstOrCreate 模型上的更改。
是的,或者另一种思考方式是,如果您可以一次性传递所有属性(使用第二个参数),请使用 firstOrCreate,但如果您在保存之前需要进一步的逻辑,请使用 firstOrNew。
N
Nabil
if($user->isEmpty()){
    // has no records
}

Eloquent 使用集合。请参阅以下链接:https://laravel.com/docs/5.4/eloquent-collections


是的,但它不返回一个集合。它返回一个模型对象,因为您假设每个用户都有一个唯一的 email,因此 ->isEmpty() 将引发错误。
如果我收到以下错误怎么办:Call to a member function isEmpty() on null
N
Nadeem Qasmi

Laravel 5.6.26v

通过主键( email 或 id )查找现有记录

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

然后

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

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


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

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

first() 更快,因为它会检查单个匹配项,而 count() 会计算所有匹配项。


A
A. Zaman

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

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}

S
Sharryy

这有点晚了,但它可能会帮助那些试图使用 User::find()->exists() 来记录存在的人,因为 Laravel 显示了 find()where() 方法的不同行为。考虑电子邮件作为您的主键,让我们检查一下情况。

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

如果存在包含该电子邮件的用户记录,则它将返回 true。然而令人困惑的是,如果不存在使用该电子邮件的用户,那么它将引发错误。 IE

Call to a member function exists() on null.

但是 where() 的情况不同。

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

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


K
Karthik

在你的控制器中

$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

A
Arthur Tarasov

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

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

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

    return $user;
}

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


您可以将 find 替换为 whereUser::where(id, 1)->first()
J
Julian
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

可以与 try/catch 一起使用

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


B
Basharmal
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif

N
Nijat Aliyev

使用 Validator 简单、舒适且易于理解

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);
        }

A
Arian Tron

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

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

K
Kishor Pant

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

$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


S
Syed Muzammil Ali

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

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

w
wheelmaker

最短的工作选项:

// 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();

C
Chawker21
$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
}

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


M
Mathesh Raj
$user = User::where('email', request('email'))->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');

J
JoSSte

我认为以下方式是实现相同目标的最简单方法:

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

r
rc.adhikari

创建以下方法(为我自己)以检查给定的记录 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);

主页 它有帮助!


请注意,通过使用 count,您可以计算整个表中的某条记录。如果表包含至少一条所需记录,则 exists 方法返回 true
R
Rahul Jat

最简单的方法

    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!');
}

R
Rafiq

Laravel 6 或顶部:写表名,然后给出 where 子句条件,例如 where('id', $request->id)

 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.');
        }

    }

A
Abdullah Shakir

如果您想在数据库中插入一条记录,但不存在具有相同电子邮件的记录,则可以执行以下操作:

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

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

您可以在此处查看文档:Laravel upserts doc


H
Hamid Teimouri

如果要插入唯一记录,可以使用 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());

请考虑 count 方法对记录进行计数,在这种情况下它的性能并不好。
@AliN11 我没有使用 count 方法
S
Suresh Kumar Kumawat
$userCnt     = User::where("id",1)->count();
if( $userCnt ==0 ){
     //////////record not exists 
}else{
      //////////record exists 
}

注意::根据您的要求条件。


L
Lawrence E Bosumbe

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

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

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

R
Rashi Goyal

很容易知道有没有记录

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

获取所有记录,然后计数?!