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或手动设置。