我有一个SQLite数据库从另一个软件,我需要集成到我自己的API。我通过在Laravel的API中添加模型和关系,成功开始了这个任务(多个数据库)。Laravel 5.1:与SQLite rowid的关系?
但现在我到了一个地步,我无法继续,因为我不知道如何通过使用“rowid”作为关键字在该外部数据库中的两个表之间建立关系。
我已经试过:
增加了一个通常的关系,这两种模式那样:
A型: 有一个名为 “BU_ZIMMER” 列存储的 “ROWID”其它模型(B)
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');
}
}
控制器:通过使用 “具有()” 方法获取的所有数据。这适用于所有“正常链接”,但不适用于指向SQLite rowid的链接。
public function show($id)
{
return $this->respond(LdBooking::with('rentalunit')->with('category')->select('rowid', '*')->findOrFail($id));
}
结果:
问题:
我认为问题是,标准的查询不会从表中选择的ROWID。这就是为什么我通常手动将它们添加到Eloquent-Query ->select('rowid', '*')
。但我不知道如何教我的关系,如果它通过关键字“rowid”加入另一个表,它需要先选择“rowid”。
有没有办法做到这一点?也许修改模型?或者是否有可能解决这个问题?
我还找不到有效的解决方案。
一个不那么干净的解决方案:
的Laravel文档中挖掘更多后,我找到了第一个解决方案。在控制器我改变了查询:
public function show($id)
{
$booking = LdBooking::with(['rentalunit' => function($query) {
$query->select('rowid', '*');
}])->select('rowid', '*')->findOrFail($id);
return $this->respond($booking);
}
这取我的链接rentalunit并自动将其推到返回的结果。
但是,像这样在控制器中写入查询有点脏。我想直接在模型中解决这个问题,所以在控制器中我可以简单地写->with('rentalunit')
。任何人都知道如何解决此问题?
有没有办法