我正在处理laravel项目,该项目可在满足某些条件时将值存储到循环存储的数据库条目中。
如果该条目是第一次,则它首先创建一个数组,并为其添加一个值。从此以后,它将重新调用数组并继续向其中添加值。
if(is_null($lead->shown_to)) {
$a = array();
array_push($a, "lead 1");
$lead->shown_to = serialize($cart);
$lead->save();
} else {
$a=unserialize($lead->shown_to);
array_push($a, "lead 2");
$lead->shown_to = serialize($a);
$lead->save();
}
能够创建数组并向其重复添加不同的元素。
有没有一种方法可以首先检查元素是否存在。如果是这样,就继续前进,否则添加它?
谢谢。
答案 0 :(得分:0)
有两种方法可以使用。
您可以首先使用数据库中的列在数据库上查找值(如果存在),例如:
$result = Model::where( 'column', 'value' );
if ( $result ) {
// update already exists
} else {
// create one
}
// Retrieve flight by name, or create it if it doesn't exist...
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
// Retrieve by name, or instantiate...
$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);
这也取决于您要查找的内容,因为firstOrCreate
将值持久保存到数据库中,其中firstOrNew
只是创建一个需要调用save()
的新实例
答案 1 :(得分:0)
要检查数组中是否存在值,可以使用array_search()
。如果存在,它将返回该值。如果不是,则返回false
。
if(!array_search('lead 2', $a)) {
// array does't has 'lead 2' so,
array_push('lead 2', $a);
}
答案 2 :(得分:0)
在Laravel中,我将充分利用Collections,因为它们有很多有用的方法可以使用。
我会做这样的事情:
选项1
//Depending on the value of $lead->show, initialize the cart variable with the serialization of the attribute or and empty array and transform it to a collection.
$cart = collect($lead->shown_to ? unserialize($lead->shown_to) : []);
//Ask if the collection doesn't have the given value. If so, added it.
if (!$cart->contains($your_value)) {
$cart->push($your_value);
}
//Convert to array, serialize and store
$lead->shown_to = serialize($cart->toArray());
$lead->save();
选项2
//Depending on the value of $lead->show, initialize the cart variable with the serialization of the attribute or and empty array and transform it to a collection.
$cart = collect($lead->shown_to ? unserialize($lead->shown_to) : []);
//Always push the value
$cart->push($your_value);
//Get the unique values, convert to an array, serialize and store
$lead->shown_to = serialize($cart->unique()->toArray());
$lead->save();
您可以使用这些收藏集获得更多创意,并且在Laravel上阅读效果更好
答案 3 :(得分:0)
我认为您可以使用updateOrCreate,如果不存在,它将立即创建,如果存在,将对其进行更新,因此您可以继续将值分配给show_to属性
$lead= App\Lead::updateOrCreate(
['name' => 'Lead 1'],
['shown_to' => serialize($a)]
);
如果您希望保留现有的showd_to以便更好地使用json数据,那么您可以这样做
$lead= App\Lead::updateOrCreate(
['name' => 'Lead 1'],
['shown_to' => json_encode(array_push(json_decode($a), $newData))]
);