Выпуск коллекции Laravel 5: Где не равно

В настоящее время я работаю над модальным, где пользователь может вставить файл Excel. Задача системы состоит в том, чтобы загрузить и / или добавить новую запись базы данных, если записи являются новыми или идентичны тем, которые существуют в базе данных. НО ему также нужна функция удаления для удаления тех записей, где столбец слагов не идентичен столбцу имени.

На данный момент я использую Ларавел 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',
];
}

Вот PHPMyAdmin raw SQL (который работает), который я в основном ищу для использования в коллекции:

SELECT * FROM `products` WHERE `slug` != `name`

Я надеюсь, что кто-то может помочь мне выйти из этой ямы. Я плыву по Интернету около 12 часов, чтобы сделать это.

~ nitsuJ

0

Решение

+ Изменить

$product = Product::all()->where('slug', $value->slug)->first();
$product_false = Product::all()->where('slug', '!=' , 'name')->get();

В

$product = Product::where('slug', $value->slug)->first();
$product_false = Product::where('slug', '!=' , 'name')->get();
0

Другие решения

Попробуй это

$product = Product::where('slug', $value->slug)->first();
$product_false = Product::whereRaw('slug != name')->get();

просто where не будет работать, как это сравнивается products.slug с "name"(Строка).

0

Мне удалось решать Это.

$data = Excel::load($path, function($reader) {

$importedSlugs = $data->select(array('slug'))->toArray();
//collection of imported slugs
$collectionOfImportedSlugs = collect($importedSlugs)->flatten()->all();

//get all product slugs
$productSlugs = Product::all()->pluck('slug');

//get all different slugs!
$diffSlugsArray = $productSlugs->diff($collectionOfImportedSlugs)->all();
//dd($diffSlugsArray);

foreach ($diffSlugsArray as $diffSlug) {
$product_false = Product::all()->where('slug',     $diffSlug)->first();

echo $product_false->slug . 'has been deleted!';

$product_false->delete();
}
})->get();
0
По вопросам рекламы [email protected]