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

我构建了两个模型,代表我的 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 对象时,它可以工作。当我导入数据时,这似乎是一个问题。


四季花海
浏览 152回答 2
2回答

慕桂英546537

我认为您缺少 coor() 关系中的键。您没有使用 autodealers 表中的 id 作为外键,因此您需要在关系中进行设置。public&nbsp;function&nbsp;coor(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this->belongsTo('App\plz',&nbsp;'id',&nbsp;'plz_id'); }

HUWWW

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(){&nbsp; &nbsp; Schema::create('plzs', function (Blueprint $table) {&nbsp; &nbsp; &nbsp; &nbsp; $table->bigIncrements('id');&nbsp; &nbsp; &nbsp; &nbsp; $table->text("Ort");&nbsp; &nbsp; &nbsp; &nbsp; $table->decimal('Latitude', 10, 8);&nbsp; &nbsp; &nbsp; &nbsp; $table->decimal('Longitude', 11, 8);&nbsp; &nbsp; &nbsp; &nbsp; $table->timestamps();&nbsp; &nbsp; });}和public function up(){&nbsp; &nbsp; Schema::create('autodealers', function (Blueprint $table) {&nbsp; &nbsp; &nbsp; &nbsp; $table->bigIncrements('id');&nbsp; &nbsp; &nbsp; &nbsp; //connect to the plzs table via reference to plz table&nbsp; &nbsp; &nbsp; &nbsp; $table->unsignedBigInteger('plz_id');&nbsp; &nbsp; &nbsp; &nbsp; $table->text("Händler");&nbsp; &nbsp; &nbsp; &nbsp; //index for any foreign key&nbsp; &nbsp; &nbsp; &nbsp; $table->index('plz_id');&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $table->timestamps();&nbsp; &nbsp; });}在 mySQL 中updated_at,created_at每个表的 , 列必须另外设置 CURRENT-TIME 标准,以便在导入 csv 数据期间填充updated_at和列。created_at
打开App,查看更多内容
随时随地看视频慕课网APP