【发布时间】:2014-10-08 00:41:34
【问题描述】:
假设我有一个包含这些数据的名为组的表:
+----+---------+------+--------+ |编号 |用户 ID |姓名 |颜色 | +----+---------+------+--------+ | 1 | 1 |富 |绿色 | | 2 | 1 |酒吧 |红色 | | 3 | 1 |巴兹 | | | 4 | 2 |巴兹 |灰色 | | 5 | 3 |富 |蓝色 | | 6 | 3 |巴兹 | | | 7 | 4 |巴兹 |棕色 | | 8 | 4 |富 | | | 9 | 4 |曲奇 |黑色 | +----+---------+------+--------+我将读取一个 csv 文件并将其转换为如下数据数组:
[
[
'user_id' => 2,
'name' => 'foo'
],
[
'user_id' => 2,
'name' => 'bar'
],
[
'user_id' => 2,
'name' => 'baz'
],
[
'user_id' => 2,
'name' => 'qux'
],
[
'user_id' => 2,
'name' => 'tux'
],
]
只将新数据插入数据库,并跳过数据库中已经存在的数据,在本例中,为用户 2 分组 baz。
在 Eloquent 中有一些有用的方法,例如 firstOrCreate() 或 findOrNew(),这似乎是我需要的,但这些方法仅用于一条记录,如果我使用它们,我应该在每个文件行运行它们。
while($line = $this->decoder->decode($this->file) {
$row = Group::firstOrCreate($line);
}
有没有更好的解决方案来减少查询?
【问题讨论】:
标签: mysql laravel laravel-4 eloquent