尝试从一种形式发布到两个数据库表 - Laravel 8
Posted
技术标签:
【中文标题】尝试从一种形式发布到两个数据库表 - Laravel 8【英文标题】:Trying to post to two database tables from one form - Laravel 8 【发布时间】:2021-07-07 04:19:16 【问题描述】:我正在使用 Laravel 8 并尝试将申请表发布到我的数据库中的两个表中
来自我的 2 个数据库迁移文件:
public function up()
Schema::create('applicants', function (Blueprint $table)
$table->id();
$table->string('apptitle');
$table->string('firstname');
$table->string('middlename')->nullable();
...
$table->timestamps();
);
public function up()
Schema::create('applications', function (Blueprint $table)
$table->id();
$table->integer('applicant_id');
$table->integer('user_id');
$table->integer('loanAmount');
$table->string('loanTerm');
...
$table->timestamps();
);
型号:
class Applicant extends Model
use HasFactory;
protected $table = 'applicants';
protected $fillable = [
'apptitle', 'firstname', 'middlename'...
];
public function application()
return $this->hasOne(Application::class);
class Application extends Model
use HasFactory;
protected $table = 'applications';
protected $fillable = [
'applicant_id',
'user_id',
'loanAmount',
'loanTerm',
...
];
public function applicant()
return $this->belongsTo(Applicant::class);
控制器:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\Applicants\CreateApplicantRequest;
class ApplicantsController extends Controller
...
public function store(CreateApplicantRequest $request)
$applicant = Applicant::create([
'apptitle' => $request->apptitle,
'firstname' => $request->firstname,
'middlename' => $request->middlename,
...
]);
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Application;
use App\Models\Applicant;
use App\Models\User;
use App\Http\Requests\Applications\CreateApplicationRequest;
class ApplicationsController extends Controller
...
public function store(CreateApplicationRequest $request)
$application = Application::create([
'applicant_id' => $request->applicant_id,
'user_id' => 'required',
'loanAmount' => 'required',
'loanTerm' => 'required',
...
]);
请求:
public function rules()
return [
'apptitle' => 'required',
'firstname' => 'required',
'middlename',
...
];
public function rules()
return [
'applicant_id' => 'required',
'user_id' => 'required',
'loanAmount' => 'required',
'loanTerm' => 'required',
...
];
web.php
Route::get('applicants','ApplicantsController@store');
Route::resource('applications', 'ApplicationsController');
Route::get('applications/application', 'ApplicationsController@show');
我不断收到错误:申请人 ID 字段是必需的。 (如果我将此字段设为空,则表单会成功将所有其他字段发布到数据库。)
这是我的第一个大型 Laravel 项目,非常感谢任何帮助。
更新:
我已经查看了提供的答案,但仍然遇到同样的错误。
我觉得主要问题是 - 当填写表格时,新创建的申请人的 applicant_id 字段没有被捕获并添加到申请表中?
【问题讨论】:
欢迎来到 SO .. 你如何调用这两个控制器? 你能检查一下你在$request->applicant_id
中得到的值是多少,因为在你的迁移中applicant_id
列是not null
。并请在模型中指定表名。
没有值被传递给申请者ID
从 ApplicationsController 中删除 use App\Http\Requests\Applicants\CreateApplicantRequest;。
【参考方案1】:
You can store data from one form into 2 tables like this.
【讨论】:
这会替换单独的数据库请求文件吗?【参考方案2】:删除使用 App\Http\Requests\Applicants\CreateApplicantRequest;从您的 ApplicationsController 并运行以下 cmd 命令:
composer dump-autoload
php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear
这些命令会清除项目中的所有缓存。
将 nullable 添加到您的应用程序迁移申请者 ID:
$table->integer('applicant_id')->nullable();
【讨论】:
我试过了,结果还是一样:-( 在您的申请迁移文件中,将申请者 ID 设为可为空:$table->integer('applicant_id')->nullable();【参考方案3】:我终于能够将我的表单正确发布到两个数据库 - 非常感谢所有在此过程中帮助我的人。
这是我在 ApplicationsController 中更新的存储功能:
public function store(CreateApplicationRequest $request, Applicant $applicant)
$applicant = Applicant::create([
'apptitle' => $request->apptitle,
'firstname' => $request->firstname,
'middlename' => $request->middlename,
...
]);
$application = $applicant->application()->create([
'applicant_id' => $applicant->id,
'user_id' => auth()->id(),
'loanAmount' => $request->loanAmount,
'loanTerm' => $request->loanTerm,
...
]);
// redirect the user
return redirect(route('applications.index'));
我希望这个答案可以帮助别人!
【讨论】:
以上是关于尝试从一种形式发布到两个数据库表 - Laravel 8的主要内容,如果未能解决你的问题,请参考以下文章
因为我可以从 jquery 将数据从一种形式发送到另一种形式?