MySQL数据库devise+查询 – Laravel

我的数据库有一些问题。

在我的应用程序中,我从Excel工作表中检索数据。 我正在使用框架Laravel和图书馆Laravel Excel(maatwebsite)。

当我上传一个文件。 在这个例子中,表格中有7行被插入到数据库中。

数据库: 在这里输入图像说明

我用这个查询从他们中检索5个:

$documentData = DB::table('documents') ->select(array('weld', 'diameter', 'thicknes', 'steelgrade', 'material', 'weldingdate', 'welderid', 'requestid')) ->where('diameter', '21.3') ->where('thicknes', '2.5') ->where('steelgrade', '—Ú20') ->get(); 

我select基于直径厚度steelgrade (我独特的组合为每个Excel模板(多种组合可能))的数据。

我将这些信息放入与组合相匹配的excel文件中并保存。 这一切工作正常。 但! 当我上传另一个文件(Excel模板相同的唯一组合),几乎相同的信息,除了一列。

查询将检索所有的行(2次上载后10)。 我怎样才能确保它只会抢最新的上传。 我知道Laravel提供了created_at,updated_at列,但我想知道是否有其他的东西。 按/分组顺序? 或Latest();

我想知道有没有人有build议,我可以解决这个问题。

您可以将groupBy为唯一值,然后orderBy created_at,并使用take()获取最后插入的值。

 DB::table('documents') ->select(array('weld', 'diameter', 'thicknes', 'steelgrade', 'material', 'weldingdate', 'welderid', 'requestid')) ->where('diameter', '21.3') ->where('thicknes', '2.5') ->where('steelgrade', '—Ú20') ->groupBy('weld') ->orderBy('created_at', 'desc') ->take(5); //Replace 5 for the count of the import 

你可以这样做:

 $documentData = DB::table('documents') ->select(array('weld', 'diameter', 'thicknes', 'steelgrade', 'material', 'weldingdate', 'welderid', 'requestid')) ->where('diameter', '21.3') ->where('thicknes', '2.5') ->where('steelgrade', '—Ú20') ->latest() ->get() ->take($count); 

$ count =每次上传logging的数量,也可以在每次上传后dynamic或手动设置。