为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:如何使用外键填充现有数据?

Laravel:如何使用外键填充现有数据?

PHP
四季花海 2023-07-08 17:25:43
我构建了两个模型,代表我的 mysql 数据库中的两个表。在一张表中,我获得了一些汽车经销商的邮政编码,在第二张表中,我获得了邮政编码的坐标。不幸的是,我没有得到相关数据。我使用了 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');              });}然后我迁移该表并在我的数据库中创建该表。之后,我通过 csv 文件将数据导入到 mySQL 中的表中。一切正常。这里我定义了一对一的关系。请.php:public function dealer(){    return $this->hasOne('App\Autodealer', 'plz_id');}自动经销商.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 对象时,它可以工作。当我导入数据时,这似乎是一个问题。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我认为您缺少 coor() 关系中的键。您没有使用 autodealers 表中的 id 作为外键,因此您需要在关系中进行设置。

public function coor(){
    return $this->belongsTo('App\plz', 'id', 'plz_id');
}


查看完整回答
反对 回复 2023-07-08
?
HUWWW

TA贡献1874条经验 获得超12个赞

updated_at当我使用 Tinker 时,我注意到,如果没有,就无法保存对象created_at。Tinker 抛出这个 SQL 错误:


照亮/数据库/QueryException 并显示消息 'SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列 'updated_at'(SQL:插入 ( , , )plzs值id( updated_at33611 created_at, 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每个表的 , 列必须另外设置 CURRENT-TIME 标准,以便在导入 csv 数据期间填充updated_at和列。created_at


查看完整回答
反对 回复 2023-07-08
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信