Php 动态获取不同关联行的旧列值(在laravel中)
我有一张汽车表。车辆可转让。将车辆转让给新车主时,会向表中添加另一行,其中包含不同的详细信息。旧车辆的车辆转移列将填充该新行的id 车辆可以多次转移。这是车辆表:Php 动态获取不同关联行的旧列值(在laravel中),php,mysql,sql,laravel,relation,Php,Mysql,Sql,Laravel,Relation,我有一张汽车表。车辆可转让。将车辆转让给新车主时,会向表中添加另一行,其中包含不同的详细信息。旧车辆的车辆转移列将填充该新行的id 车辆可以多次转移。这是车辆表: +--------------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default
+--------------------+------------------+------+-----+---------------------+----------------+
| 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的新车主。因此,转移柱中填充了7个。vehicles\u transfer(车辆转移)栏表示此车辆转移到已填写的id
然后,车辆id 7被进一步转移到id 12,因此,其车辆_转移栏中填充了12
这个过程又发生了3次
现在,我有了当前车辆的id,我想知道该车辆以前被转移了多少次。我还制作了一个函数getOldVehicleId,它获取车辆的id并提供车辆的传输值
但我不明白如何让所有的旧车传递价值
编辑:
基本上,我想让它充满活力
$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;
}
从你所说的,在你的设计中没有这样的方式。没有关于过去谁拥有这辆车的信息。 我认为这个设计不是很好。您正在一次又一次地复制车辆数据,同时丢失有关其原始ID的信息。 您应该保持未更改的数据的唯一性。 我最好的想法是拥有权表,您将保留用户id和车辆id以及拥有权日期。从这一点来说,您可以在此表中有一些状态列和结束所有权的日期,也可以创建具有所有权历史的表,具体取决于将来表的大小 嗯。因此,在您的设计中,您必须获得当前的车辆id。使用此id查找车辆转移,获取此车辆id并在“转移”列中查找,依此类推。但前提是不存在重复的传输值。就像我说的,你的设计不好 如果你坚持走自己的路,想按照自己的设计走。使用递归函数。苏姆蒂恩是这样说的:
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);
你可能需要仔细考虑一下。但我希望您能理解这个概念。如果每次车辆转移时都添加一行,则计算行数将得到转移计数?。不会吧?不会的。所有车辆都在车辆表中,包括所有其他车辆。我的意思是,按车辆ID和sqlI分组,我没有得到你的分数。你能举个例子吗?vehicles\u transfer一栏显示这辆车被转移到该栏中的值。因此,如果我有一辆车的当前id,我可以检查这辆车以前是其他人的车,因为某行的“车辆”传输列将填充当前车的id。如果id为2的车辆被转移到id为3的车辆,则id为2的世界其他地区的车辆转移栏将填充3。此外,如果3被转移到4,则id为3的车辆转移栏将填充4