我对Laravel很陌生,尤其是在从数据库检索东西时。在阅读了他们关于query builder的文档后,我找到了一个部分,其中显示了执行我所需操作的示例代码:
如果不需要整行,可以使用value方法从记录中提取单个值。此方法将直接返回列的值:
$email=DB::table('users'))-
因此,我更改了我需要的表和值:
$loginID = DB::table('logins')->where('email', $email)->value('id');
我目前正在处理注册,当用户注册时,RegisteredUserController.php将运行。但是,它会因以下错误而崩溃:
QLSTATE[HY000]:一般错误: 1364字段'loginID'没有默认值(SQL:插入到
用户
(名称
,地址
,irdNum
,电话
,updated_at
,created_at
)值(Tessa Jewels,107a Allum Street,222222, 0275502217, 2021-08-21 05:28:37, 2021-08-21 05:28:37))
在查看了Stack Overflow上的其他帖子后,似乎当表不可为空并且您向其传递了空值时,就会发生该错误。
以下是我的课程:
用户迁移文件
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->bigIncrements('id');
$table->string('name', 45);
$table->mediumText('address');
$table->string('irdNum');
$table->integer('phone');
$table->bigInteger('loginID')->unsigned()->index();
$table->timestamps();
});
Schema::table('users', function($table) {
$table->foreign('loginID')->references('id')->on('logins')
->onUpdate('cascade')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
登录迁移文件
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLoginsTable extends Migration
{
public function up()
{
Schema::create('logins', function (Blueprint $table) {
$table->id();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('logins');
}
}
登录模式
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class Login extends Authenticatable
{
use HasFactory,Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'email',
'password'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
}
用户模型
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'address',
'irdNum',
'phone',
'logInID'
];
}
注册用户控制器
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\Login;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use Illuminate\Support\Facades\DB;
class RegisteredUserController extends Controller
{
/**
* Display the registration view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.register');
}
/**
* Handle an incoming registration request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'address' => 'required|string|max:500',
'irdNum' => 'required|string|max:12',
'phone' => 'required|string|max:16',
'email' => 'required|string|email|max:255|unique:logins',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$login = Login::create([
'email' => $request->email,
'password' => Hash::make($request->password)
]);
event(new Registered($login));
$email = $request->email;
$loginID = DB::table('logins')->where('email', $email)->value('id');
if (is_null($loginID)) {
$loginID = 123;
}
$user = User::create([
'name' => $request->name,
'address' => $request->address,
'irdNum' => $request->irdNum,
'phone' => $request->phone,
'loginID' => $loginID
]);
$user->save();
Auth::login($login);
return redirect(RouteServiceProvider::HOME);
}
}
在这个项目中,Login模型被用来进行身份验证,而不是Laravel进行身份验证的常规方式。我知道把它作为身份验证的默认值会容易得多,但我也想学习事情是如何工作的,这样做教会了我很多。
此外,它将事情保存到我的数据库中。例如,如果我摆脱了用户代码,只有创建登录,然后注册,我就可以立即通过PhpMyAdmin在我的数据库中看到这个条目。它似乎只是在检索任何东西上有问题。
问题说明
$email = $request->email;
$loginID = DB::table('logins')->where('email', $email)->value('id');
请求通过表单发送,其中一个输入是电子邮件。因此,用户填写他们的详细信息,并生成一个登录条目,保存他们的电子邮件和密码。之后,我提取它是哪个条目(通过在数据库中搜索logins表中与请求电子邮件匹配的条目)并检索其ID。然后在创建用户模型时使用该ID:
$user = User::create([
'name' => $request->name,
'address' => $request->address,
'irdNum' => $request->irdNum,
'phone' => $request->phone,
'loginID' => $loginID
]);
$user->save();
但是它抱怨
'loginID'=
我的开发环境是由Docker运行4个容器设置的:app(php)、db(mysql)、PhpMyAdmin和webserver(nginx)(如果有帮助的话)。
事实证明$loginID的值是正确的,所以我不太清楚为什么在尝试使用它创建用户模型时会出错。我通过执行
dd($loginID)找到了值
如评论中所建议。
尝试使用此查询:
$loginID = DB::table('logins')->where('email', $email)->first('id');
在用户模型$fillable中,您将logInID更改为loginID
我正在使用Laravels查询生成器检索带有一些筛选选项的项目列表-我需要在此查询中进行计数: 计算“Freestyle ID”在likes表中出现的次数。 这有可能吗?返回的数据是完美的,我只需要一个自由泳的喜欢量,其中喜欢表中的自由泳ID为空。
我正在尝试获取自定义属性(https://laravel.com/docs/5.5/eloquent-mutators#defining-访问器)从查询中删除。 现在我有: 你ser.php 用户控制器。php 返回 所以问题是:有没有办法也获得view\u url属性?(我用()在内部进行了尝试,但失败了) 我还可以只返回角色名,而不是像您在“return”代码中看到的那样返回整个对象吗?(我想
我有一个问题,使laravel查询: 我想举个例子: 我有这个但不起作用:
我想在查询生成器laravel中orderBy 因为我的是类型 所以当它排序的时候...结果远远不是我想要的... 我的剧本就像这样 我已经试过了 我如何铸造OrderBy查询生成器,以便我可以排序desc
我有一张这样的桌子- 因此,我有一个特殊的数据类型()用于。 原始select查询如下所示- 结果是- 我想在带有查询生成器的Laravel中使用它,以便()这2个点可以来自用户输入。 我所做的是- 但它不起作用。 有人能帮忙吗?
问题内容: 我有一个由一些条件创建的复杂查询,我想从将要执行的构建器对象中获取最终的SQL查询。我可以那样做吗? 问题答案: 您可以执行以下操作: 但是Laravel不会在查询中向您显示参数,因为它们是在准备查询后绑定的。 因此,您也可以执行以下操作: