Laravel: 如何用外键填充现有数据?
Laravel: How to populate existing data with a foreignkey?
我在我的 mysql 数据库中构建了两个模型,代表两个 table。
在一个 table 中,我得到了一些汽车经销商的邮政编码,在第二个中,我得到了坐标
的邮政编码。
不幸的是,我没有得到
相关数据。
我用了 zip_code 和 foreign_key。
public function up()
{
Schema::create('plzs', function (Blueprint $table) {
$table->id();
$table->text("Ort");
$table->decimal('Latitude', 10, 8);
$table->decimal('Longitude', 11, 8);
});
}
和
public function up()
{
Schema::create('autodealers', function (Blueprint $table) {
$table->id();
$table->bigInteger('plz_id')->unsigned();
$table->text("Händler");
$table->foreign('plz_id')->references('id')->on('plzs')->onDelete('cascade');
});
}
然后我迁移 table 并在我的数据库中创建 table。
之后,我通过 csv 文件将数据导入 mySQL 中的 tables。一切正常。
这里我定义的是一对一的关系。
plz.php:
public function dealer()
{
return $this->hasOne('App\Autodealer', 'plz_id');
}
Autodealer.php:
public function coor()
{
return $this->belongsTo('App\plz');
}
通过web.php 我正在定义路线:
Route::get('/auto', 'AutohaendlerController@index');
从这条路线我调用索引方法:
public function index()
{
$dealer = \App\Autodealer::all();
return view('plz', array('ausgabe'=>$dealer));
}
当我的视图看起来像这样时,它工作得很好:
<body>
<ul>
@foreach ($ausgabe as $dealer)
<li>{{$dealer}}</li>
@endforeach
</ul>
但是当我改用<li>{{$dealer->coor}}</li>
时,没有显示任何数据。
coor() 函数应该调用 belongTo 方法。
在修补程序中,我的数据似乎也不相关。
我错过了什么?
当我使用 tinker 并保存具有相同 ID 和 plz_id 的 plz 对象和 Autodealer 对象时,它起作用了。
当我导入数据时,这似乎是一个问题。
我认为您缺少 coor() 关系中的键。您没有在 autodealers table 中使用 id 作为外键,因此您需要在关系中设置它。
public function coor()
{
return $this->belongsTo('App\plz', 'id', 'plz_id');
}
当我使用 Tinker 时,我注意到,如果没有 updated_at
、created_at
,我将无法保存对象。
Tinker 抛出这个 SQL-Error:
Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into plzs
(id
、updated_at
、created_at
)值(33611、2020-07-02 11:18:12、2020-07-02 11:18:12) )'
所以我在我的表中添加了时间戳:
public function up()
{
Schema::create('plzs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text("Ort");
$table->decimal('Latitude', 10, 8);
$table->decimal('Longitude', 11, 8);
$table->timestamps();
});
}
和
public function up()
{
Schema::create('autodealers', function (Blueprint $table) {
$table->bigIncrements('id');
//connect to the plzs table via reference to plz table
$table->unsignedBigInteger('plz_id');
$table->text("Händler");
//index for any foreign key
$table->index('plz_id');
$table->timestamps();
});
}
在mySQL中,updated_at
、created_at
列中的每个table必须另外设置CURRENT-TIME标准,以便填写updated_at
和created_at
导入 csv 数据期间的列。
此致
我在我的 mysql 数据库中构建了两个模型,代表两个 table。 在一个 table 中,我得到了一些汽车经销商的邮政编码,在第二个中,我得到了坐标 的邮政编码。 不幸的是,我没有得到 相关数据。 我用了 zip_code 和 foreign_key。
public function up()
{
Schema::create('plzs', function (Blueprint $table) {
$table->id();
$table->text("Ort");
$table->decimal('Latitude', 10, 8);
$table->decimal('Longitude', 11, 8);
});
}
和
public function up()
{
Schema::create('autodealers', function (Blueprint $table) {
$table->id();
$table->bigInteger('plz_id')->unsigned();
$table->text("Händler");
$table->foreign('plz_id')->references('id')->on('plzs')->onDelete('cascade');
});
}
然后我迁移 table 并在我的数据库中创建 table。 之后,我通过 csv 文件将数据导入 mySQL 中的 tables。一切正常。
这里我定义的是一对一的关系。 plz.php:
public function dealer()
{
return $this->hasOne('App\Autodealer', 'plz_id');
}
Autodealer.php:
public function coor()
{
return $this->belongsTo('App\plz');
}
通过web.php 我正在定义路线:
Route::get('/auto', 'AutohaendlerController@index');
从这条路线我调用索引方法:
public function index()
{
$dealer = \App\Autodealer::all();
return view('plz', array('ausgabe'=>$dealer));
}
当我的视图看起来像这样时,它工作得很好:
<body>
<ul>
@foreach ($ausgabe as $dealer)
<li>{{$dealer}}</li>
@endforeach
</ul>
但是当我改用<li>{{$dealer->coor}}</li>
时,没有显示任何数据。
coor() 函数应该调用 belongTo 方法。
在修补程序中,我的数据似乎也不相关。
我错过了什么?
当我使用 tinker 并保存具有相同 ID 和 plz_id 的 plz 对象和 Autodealer 对象时,它起作用了。 当我导入数据时,这似乎是一个问题。
我认为您缺少 coor() 关系中的键。您没有在 autodealers table 中使用 id 作为外键,因此您需要在关系中设置它。
public function coor()
{
return $this->belongsTo('App\plz', 'id', 'plz_id');
}
当我使用 Tinker 时,我注意到,如果没有 updated_at
、created_at
,我将无法保存对象。
Tinker 抛出这个 SQL-Error:
Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into plzs
(id
、updated_at
、created_at
)值(33611、2020-07-02 11:18:12、2020-07-02 11:18:12) )'
所以我在我的表中添加了时间戳:
public function up()
{
Schema::create('plzs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text("Ort");
$table->decimal('Latitude', 10, 8);
$table->decimal('Longitude', 11, 8);
$table->timestamps();
});
}
和
public function up()
{
Schema::create('autodealers', function (Blueprint $table) {
$table->bigIncrements('id');
//connect to the plzs table via reference to plz table
$table->unsignedBigInteger('plz_id');
$table->text("Händler");
//index for any foreign key
$table->index('plz_id');
$table->timestamps();
});
}
在mySQL中,updated_at
、created_at
列中的每个table必须另外设置CURRENT-TIME标准,以便填写updated_at
和created_at
导入 csv 数据期间的列。
此致