gpt4 book ai didi

php - 拉维尔 5.1 : Relationships with SQLite rowid?

转载 作者:行者123 更新时间:2023-12-02 02:29:35 26 4
gpt4 key购买 nike

我有一个来自另一个软件的 SQLite 数据库,我需要将其集成到我自己的 API 中。我通过向 Laravel 中的 API 添加模型和关系成功地开始了该任务(多个数据库)。

但现在我无法继续,因为我不知道如何使用“rowid”作为键在该外部数据库中的两个表之间建立关系。

我尝试过的:

为两个模型添加了通常的关系,如下所示:

模型A:有一个名为“BU_ZIMMER”的列,用于存储另一个模型 (B) 的“rowid”

class LdBooking extends Model
{
protected $connection = 'lodgitDB';
protected $table = 'b_buchungen';
protected $primaryKey = 'rowid';
public $timestamps = false;

public function rentalunit()
{
return $this->belongsTo('App\Models\LodgitDesk\LdRentalunit', 'BU_ZIMMER', 'rowid');
}
}

模型 B:具有由其他模型链接的 rowid。

class LdRentalunit extends Model
{
protected $connection = 'lodgitDB';
protected $table = 'o_mieteinheit';
protected $primaryKey = 'rowid';
public $timestamps = false;

public function bookings()
{
return $this->hasMany('App\Models\LodgitDesk\LdBooking', 'rowid', 'BU_ZIMMER');
}
}

Controller :使用“with()”方法获取所有数据。这对于所有“普通链接”都非常有效,但不适用于指向 SQLite rowid 的链接。

public function show($id)
{
return $this->respond( LdBooking::with('rentalunit')->with('category')->select('rowid', '*')->findOrFail($id) );
}

结果:

enter image description here

问题:

我认为问题是,标准查询不会从表中选择 rowid。这就是为什么我通常将它们手动添加到 Eloquent-Query ->select('rowid', '*') 中。但我不知道如何教导我的关系,如果它通过键“rowid”连接另一个表,则需要首先选择这个“rowid”。

有什么办法可以做到这一点吗?也许修改模型?或者可以解决这个问题吗?

我还找不到有效的解决方案。

不太干净的解决方案:

在深入研究 Laravel 文档后,我找到了第一个解决方案。在 Controller 中,我将查询更改为:

public function show($id)
{
$booking = LdBooking::with(['rentalunit' => function($query) {
$query->select('rowid', '*');
}])->select('rowid', '*')->findOrFail($id);
return $this->respond($booking);
}

这为我获取了链接的租赁单元并自动将其推送到返回的结果。

但是像这样在 Controller 中编写查询有点脏。我想直接在模型中解决这个问题,这样在 Controller 中我只需编写 ->with('rentalunit') 即可。有谁知道如何解决这个问题吗?

有没有办法

最佳答案

好吧,我已经尝试了更多方法来解决我的问题,看起来我已经找到了一个很好的解决方案,并且按照我想要的方式工作:

模型A:

我从上面的问题中更改了模型,并简单地添加了一个 ->select('rowid','*') :

class LdBooking extends Model
{
protected $connection = 'lodgitDB';
protected $table = 'b_buchungen';
protected $primaryKey = 'rowid';
public $timestamps = false;

public function rentalunit()
{
return $this->belongsTo('App\Models\LodgitDesk\LdRentalunit', 'BU_ZIMMER', 'rowid')->select('rowid', '*');
}
}

现在,我上面问题中的同一 Controller 返回了我预订中的租赁单元,而无需添加额外的代码!没想到 Laravel 这么强大!

关于php - 拉维尔 5.1 : Relationships with SQLite rowid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34019297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com