【问题标题】:Lumen Eloquent Relations流明雄辩关系
【发布时间】:2019-07-16 14:29:36
【问题描述】:

更新

我的方法是接收相当于 simpel mysql 连接的东西。我想要来自 table 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();

难道不能通过关系达到同样的效果吗?

结束更新

我有两张桌子txtxevent

发送:

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) 错误方法调用异常 调用未定义的方法 Illuminate\Database\Query\Builder::txeventWithShortnumber()

在 Builder.php 第 2483 行

谁能告诉我我做错了什么?

【问题讨论】:

  • 可以有多个txevent 对一个tx 不考虑短号码吗?
  • 是的,1 tx 可以有 n txevent

标签: eloquent lumen


【解决方案1】:

我建议这样做:

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 变量现在也将保存具有给定短编号的 txEvents。

我不确定您是否可以动态地将条件传递给雄辩的关系。

【讨论】:

  • 您的代码导致:(1/1) ErrorException Undefined variable: tx in TxController.php line 55
  • 因为我对这种关系很陌生,所以我可能误解了整个事情。我的目标是在 sql 中实现像普通连接一样的结果。从 tx 中返回所有内容以及来自 txevent 的相应数据,其中 txevent.tx_id = tx.id。参考我发现这就是我最终得到的指南。
  • 更新了我的答案,有一个错字,现在应该可以了。
  • 结束于:(1/1) FatalThrowableError 在 TxController.php 第 55 行调用未定义函数 App\Http\Controllers\request()
  • 我更新了我的答案。看起来你正在使用旧的 laravel 版本。现在就试试吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2015-03-14
相关资源
最近更新 更多