我使用foursquare api导入一些数据。我的数据库包含多个foursquare_id重复项。我在这里做错了吗?
我认为设置它的方式会检查数据库中foursquare_id的列值吗?
Bar::firstOrCreate([
// do not check for these 2 below because they are mandatory
'foursquare_id' => $item['venue']['id'],
'name' => $item['venue']['name'],
'postalCode' => isset($item['venue']['location']['postalCode']) ? $item['venue']['location']['postalCode'] : '',
'city' => isset($item['venue']['location']['city']) ? $item['venue']['location']['city'] : '',
]);
答案 0 :(得分:10)
没错。如果行对象中存在所有元素,则只会收到“第一个”。
替代方案是使用firstOrNew:
$foo = Bar::firstOrNew(['foursquare_id' => $item['venue']['id']]); // find the object with this foursquare_id. Nothing found? Create a new one with the given foursquare_id
$foo->name = $item['venue']['name'];
$foo->postalCode = isset($item['venue']['location']['postalCode']) ? $item['venue']['location']['postalCode'] : '';
$foo->city = isset($item['venue']['location']['city']) ? $item['venue']['location']['city'] : '';
$foo->save();
答案 1 :(得分:0)
此外,firstOrNew
将收到2个参数。第一个是查询,第二个是创建。
因此,您可以按foursquare_id
进行查询,如果没有创建所有参数。
像这样:
Bar::firstOrCreate(
// Query only by foursquare_id
['foursquare_id' => $item['venue']['id']],
// But, if ends up creating a Bar, also add this parameters
[
'name' => $item['venue']['name'],
'postalCode' => isset($item['venue']['location']['postalCode']) ? $item['venue']['location']['postalCode'] : '',
'city' => isset($item['venue']['location']['city']) ? $item['venue']['location']['city'] : '',
]
);