雄辩地添加if语句,然后加入另一个表

时间:2019-08-10 01:51:21

标签: mysql laravel eloquent

我的代码有问题。

就我而言,我有2张桌子。一个是表A,表A与表B的关系(使用表B中的外部非主列)

在表A中,有一些数据,如:

 +----+-------------------+
 | id | transcation_number|
 +----+-------------------+
 | 1  |   TR0919231       | 
 +----+-------------------+
 | 2  |   TR8123844       |
 +----+-------------------+
 | 3  |   RI8482452       | 
 +----+-------------------+

表B

 +----+------------+---------+
 | id | trx_number | status  |
 +----+------------+---------+
 | 1  | TR0919231  | success |
 +----+------------+---------+
 | 2  | TR8123844  | success |
 +----+------------+---------+

在这种情况下,表B中的数据编号3没有关系(此数据编号以RI开头)。数据1和2有关系。当我要显示它时,我希望数据3仍然出现但不联接到表B。数据1,2必须联接到表B。

like:

if tableA has spesific word by 'RI' 
  then not set any query where  
else 
  then set eloquent query where 'status == success' in tableB column.

对不起,我的坏话和语法。

2 个答案:

答案 0 :(得分:0)

这是您可以使用Foreign_key和local_key建立模型关系的方式

class TableA extends Model 
{

    public function tableB() {
        // Assuming the trx_number is the foreign_key that will map with 
        // transcation_number local_key
        return $this->hasOne(TableB::class, 'trx_number', 'transcation_number');
    }
}

要了解更多详细信息,请查看Documentation

答案 1 :(得分:0)

如果没有结果B,口才不应该阻止您获得结果A。但是,如果您想更加确定,则可以延迟加载关系。

关系(放在tableA.php类中):jogesh_pi拥有此权利。

public function tableB() {
    return $this->hasOne(TableB::class, 'trx_number', 'transaction_number');
}

延迟加载:

$result = TableA::get();
$result->load('tableB');

有关更多信息,请参阅本文:https://laravel.com/docs/5.8/eloquent-relationships#lazy-eager-loading

基本上,您将从表A中获得所有结果,然后在表B上进行标记,其中关系存在匹配。