首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态获取不同相关行的旧列值(在laravel中)

动态获取不同相关行的旧列值(在laravel中)
EN

Stack Overflow用户
提问于 2014-08-14 14:31:33
回答 1查看 172关注 0票数 0

我有一张车位。车辆是可以转让的。将车辆转移给新车主时,会向表中添加另一行,其中包含不同的详细信息。Old vehicle的vehicles_transfer列使用新行的id填充。

车辆可以多次转移。这是vehicle表:

代码语言:javascript
运行
复制
+--------------------+------------------+------+-----+---------------------+----------------+
| Field              | Type             | Null | Key | Default             | Extra          |
+--------------------+------------------+------+-----+---------------------+----------------+
| id                 | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| vehicles_vin       | varchar(255)     | NO   | UNI | NULL                |                |
| vehicles_model_id  | int(11)          | NO   |     | NULL                |                |
| vehicles_transfer  | int(11)          | YES  |     | NULL                |                |
+--------------------+------------------+------+-----+---------------------+-----------------

现在我被困在一个点上了。我有一辆被转移了5次的车。

当它第一次注册时,它的id是5,并且它被转移到具有车辆表id 7的新车主。因此,vehicles_transfer列中填充了7vehicles_transfer列显示此车辆已转移到已填充的id。

然后,车辆id 7被进一步转移到id 12,因此,它的vehicles_transfer列被填充为12。

这个过程已经发生了3次。

现在我有了当前车辆的id,我想知道这辆车以前被转移了多少次。我还制作了一个函数getOldVehicleId(),它获取车辆的id并提供vehicles_transfer值。

但是我不明白如何获得所有旧的vehicles_transfer值?

编辑:基本上我想让它动态化

代码语言:javascript
运行
复制
$oldVehicle1 = Vehicle::withTrashed()->where('vehicles_transfer', $id)->first();

if($oldVehicle1){
    $oldVehicleIds[] = $oldVehicle1->id;
    $oldVehicle2 = Vehicle::withTrashed()->where('vehicles_transfer', $oldVehicle1->id)->first();

    if($oldVehicle2){
        $oldVehicleIds[] = $oldVehicle2->id;
        $oldVehicle3 = Vehicle::withTrashed()->where('vehicles_transfer', $oldVehicle2->id)->first();

        if($oldVehicle3){
            $oldVehicleId[]s = $oldVehicle3->id;
            $oldVehicle4 = Vehicle::withTrashed()->where('vehicles_transfer', $oldVehicle3->id)->first();
        }else return $oldVehicleIds;
    }else return $oldVehicleIds;
}
EN

回答 1

Stack Overflow用户

发布于 2014-08-14 14:43:20

从你所说的一切来看,你的设计中没有这样的方式。没有关于过去谁拥有这辆车的信息。在我看来,这个设计不是很好。您一次又一次地复制车辆数据,同时您还丢失了有关其原始ID的信息。您应该保持未更改的数据的唯一性。我最好的想法是所有权表,在那里你将保存user_id和vehicle_id以及拥有日期。从这一点开始,您可以在该表中包含一些status列和所有权终止日期,也可以使用ownership_history创建表(这取决于将来表的大小)。

好的。因此,在你的设计中,为了计算传输次数,你必须获得当前的车辆id。查找具有此id的vehicle_transfer,获取此车辆id并在transfer列中查找它,依此类推。但仅当不存在重复的转移值时。所以就像我说的,你的设计不好。

如果你坚持走自己的路,并想继续你的设计。使用递归函数。就像这样:

代码语言:javascript
运行
复制
function getOldVehiclesIds(&$oldVehicleIds,$id)
{
    $oldVehicle = Vehicle::withTrashed()->where('vehicles_transfer', $id)->first();
    if($oldVehicle){
        $oldVehicleIds[] = $oldVehicle->id;
        getOldVehiclesIds($oldVehicleIds,$oldVehicle->id);
    }
    else
    {
        return $oldVehicleIds;
    }
}

$oldVehicleIds = array();
$oldVehicleIds = getOldVehiclesIds($oldVehicleIds,$id);

你可能需要稍微考虑一下。但我希望你能理解这个概念。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25301469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档