laravel - Laravel Eloquent 模型:2 个字段,一个 fk 引用另一个表上的 2 个字段
问题描述
我想使用 Laravel Eloquent 模型和关系来连接我项目中所有表的数据;但是,我在翻译这些关系时遇到了问题。例如,我有两张桌子;第一个是 Books 表,另一个是 Author 表。
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('code', 20)->unique('ak_books__code')->nullable(false);
$table->smallInteger('books_type_id');
$table->float('detection_limit', 10, 0);
$table->smallInteger('books_classification_id');
$table->smallInteger('books_number');
$table->foreign(['books_classification_id', 'books_number'], 'fk_books__classification_scales')
->references(['calibration_id', 'number'])->on('classification')
->onUpdate('RESTRICT')->onDelete('RESTRICT');
});
Schema::create('classification', function (Blueprint $table) {
$table->smallInteger('calibration_id');
$table->smallInteger('number');
$table->string('name', 50);
$table->primary(['calibration_id', 'number'], 'pk_classification_scales');
$table->foreign('calibration_id', 'fk_classification_calibration')->references('id')
->on('calibration_parameters')->onUpdate('CASCADE')->onDelete('CASCADE');
});
如何在 Books 表上建立关系以获取number
and calibration_id
?
解决方案
像书籍分类一样,我将向您展示一个关于任务项目之间关系的示例(这个任务的项目是什么):
任务
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('description');
$table->string('name');
$table->integer('project_id')->unsigned();
$table->timestamp('start_date');
$table->timestamp('end_date');
$table->timestamps();
$table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade')->onUpdate('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tasks');
}
项目
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('projects', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('description');
$table->tinyInteger('active')->default(1);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('projects');
}
我希望它对你有帮助,问候!
推荐阅读
- mailgun - 处理系统发送的电子邮件的答复
- java - 使用带有 Java 11 的 Spring boot 2.0 时创建名称为“entityManagerFactory”的 bean 时出错
- laravel - 在 vue,js 中传递多个变量
- php - 使用临时链接时无法滚动视频
- java - 我的代码一直用实际输出值打印“null”
- android - 谷歌地图中的底页和按钮动画
- c - 链表变体
- excel - Excel,索引查找水平值
- python - python 中的 .shuffle 方法以无限循环结束,除非我重新制作被洗牌的列表
- java - 在 JFrame 上显示的 JPanel 是否有限制?