В настоящее время я работаю над модальным, где пользователь может вставить файл excel. Задача системы — загрузить и/или добавить новую запись в базу данных, если записи новые или идентичны тем, что уже есть в базе. НО ему также нужна функция удаления для избавления от тех записей, где столбец slug не идентичен столбцу имени.
На данный момент я использую Laravel 5.3, и это мой контроллер, как сейчас:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
use App\Http\Requests;
use Illuminate\Support\Facades\DB;
use Input;
use Maatwebsite\Excel\Facades\Excel;
class ProductsController extends Controller {
public function importExcel(Request $request) {
if (Input::hasFile('productFile')) {
$path = Input::file('productFile')->getRealPath();
$checkbox = Input::get('productCheckbox');
$data = Excel::load($path, function($reader) {
})->get();
if (!empty($data) && $data->count()) {
foreach ($data as $key => $value) {
$product = Product::all()->where('slug', $value->slug)->first();
$product_false = Product::all()->where('slug', '!=' , 'name')->get();
if ($product_false !== null){
//delete row if slug does not matches name
dd($product_false);
}
Приведенный выше dd возвращает все продукты, поэтому запрос коллекции работает неправильно (см. ниже необработанный SQL, который я пытаюсь запустить в этой коллекции)
if ($product !== null) {
//update row if exist
$product->name = $value->name;
$product->description = $value->description;
$product->price = $value->price;
$product->save();
} else {
//add new row if not exist
$product = new Product;
$product->slug = $value->slug;
$product->name = $value->name;
$product->description = $value->description;
$product->price = $value->price;
$product->save();
}
}
header("Location: /products");
}
}
}
}
Это модель продукта:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'slug', 'name', 'description', 'price',
];
}
Вот необработанный SQL PHPMyAdmin (который работает), который я в основном ищу для использования в коллекции:
SELECT * FROM `products` WHERE `slug` != `name`
Я надеюсь, что кто-то может помочь мне из этой ямы. Я бороздил просторы Интернета около 12 часов, чтобы сделать это.
~ цудж
!=
один раз попробуйте с<>
- person Anant Kumar Singh   schedule 16.09.2016$product_false = Product::all()->where('slug', '!=' , 'name')->get();
? Не должно быть$product_false = Product::all()->where('slug', '!=' , $value->slug)->get();
- person KuKeC   schedule 16.09.2016