更新
我的方法是接收与simpel mysql join相等的东西。我希望将来自tabel tx的所有具有project_id = x的条目与tx.id = txevent.tx_id上的txevent一起加入。
我正在使用流明5.5
更新2
以下原始sql可以完全满足我的要求:
$rawTx = DB::>table('tx')
->join('txevent', 'txevent.tx_id', '=', 'tx.id')
->where('tx.project_id', $request->get('project_id'))
->where('txevent.short_id', $request->get('short_id'))
->get();
通过关系是否有可能实现同样的目标?
END UPDATE
我有2张桌子tx
和txevent
:
发送:
id, int, autoincrement
project_id, int
txevent:
id, int, autoincrement
tx_id, int, fk(tx.id)
shortnumber, char
在tx.php中,我有以下方法:
public function txeventWithShortnumber($shortnumber)
{
return $this->hasOne('App\Txevent')->where('shortnumber', $shortnumber)->first();
}
在TxController.php中,我会做:
$tx = Tx::where('project_id', $request->get('project_id'))->txeventWithShortnumber($request->get('shortnumber'))->get();
结果是我收到以下错误消息:
(1/1)BadMethodCallException 调用未定义的方法Illuminate \ Database \ Query \ Builder :: txeventWithShortnumber()
在Builder.php第2483行中
有人可以告诉我我在做什么错吗?
答案 0 :(得分:0)
我建议这样做:
在Tx.php
public function txEvents()
{
return $this->hasMany(TxEvent::class);
}
public function txeventWithShortnumber($shortNumber)
{
return $this->txEvents->first(function($txevent) use ($shortNumber) {
return $txevent->shortnumber == $shortNumber;
});
}
在控制器中:
$tx = Tx::where('project_id', $request->get('project_id'))->get();
// attach shortNumber event
$tx->map(function($t) use ($request) {
$t->eventWithShortNumber = $t->txeventWithShortnumber($request->get('shortnumber'));
});
$tx
变量现在还将包含具有给定短号的txEvent。
我不确定是否可以动态地将条件传递给雄辩的关系。