если работаешь в IDE, то переименование переменное не проблема. Судя по всему ты работаешь не в IDE или не знаешь пока всю её мощь и силу. Переименуй переменную. Учи силу, Люк.
@Dimon2x Приучайся сразу называть переменные так, чтоб это отражало суть использования. Если у тебя изображения называются постами, посты - булочками, а булочки - булыжниками, то ты же сам через пол года не въедешь, а что делает твой код. Кстати, я тебе тоже самое ответил, что на стеке, только без кода Здесь не принято код за людей писать. А вообще, что-то ларка для тебя сложная, зря ты с неё начал. У меня это уже 3 фреймворк (не считая микрофреймворков, на которых делал несколько простых проектов), поэтому мне сразу всё понятно. Хотя и с первым тонну тем про то, что и так в доках описано, я здесь не плодил...
Laravel местами очень удобный, хоть и тормознутый, но какой-то неочевидный для меня, если честно. А уж если в код его залезть - сразу рука к бутылке тянется (а я, если мне что во фреймворке не понятно, всегда лезу в код отладчиком). Мне поэтому Yii2 больше нравится - как-то там всё очень очевидно. И код самого фреймворка попроще будет
Думаю, как лучше сделать. Если удалить категорию, удалять ли все статьи, которые в ней лежат? При условии, то, что те статьи, которые в ней лежат, могут ещё находится в других категориях, а это не хорошо, ели они удалятся из других категорий. Может просто удалить категорию и данные из пивотной таблицы, а саму статью не удалять, а сделать ещё 1 ссылку на статьи без категорий? --- Добавлено --- И вообще на сайтах я не видел, что бы удаляли категории.
просто предложи выбрать другую категорию, куда переложить статьи, переложи статьи и удали категорию. канэц.
@igordata Я сделал так: когда категория удаляется, то ищутся все статьи этой категории и потом проверяется, есть ли такая статья в другой категории, если есть, то категория удаляется, а сама статья не удаляется, так как она есть ещё в другой категории. Если такой статьи больше нету в другой категории, то категория удаляется с этой статьёй. Потом всё автоматически периделыватеся и отображается, к каким категориям относится данная статья. Нормальный способ я выбрал? ///////////////////////////////////////////////////////////////////////////////////////////// Например, было так: Статья 1 Категории 1,3,4 Статья 2 Категории 1,2, Статья 3 Категории 4, 1 /////////////////////////////////////////////////////////////////////////// После удаления категории 1 будет так: Статья 1 Категории 3,4 Статья 2 Категории 2 Статья 3 Категории 4
@Dimon2x, если делаешь проект для себя - решай для себя, нормальный или нет. Если тебе норм - то ОК. Если делаешь проект для заказчика, то такие вещи должен решать заказчик.
@Dimon2x, если пилишь в целях обучения, пили так как сможешь, только исходя из доки. Потом, как получишь рабочую реализацию, думай о оптимизации, смотри что работает не правильно/плохо и проводи рефакторинг. Всеравно, все что тебе тут скажут ты не запомнишь. )
Лучше переводить в статус неопубликованных а дальше если нужно или удаляешь или меняешь категорию. Или создать категорию без категории
Продолжаю с удалением. При удалении категории, удаляются в ней статьи. Была такая каша PHP: public static function deleteCategory($id) { $posts = DB::table('category_image')->select('image_id')-> where('category_id', $id)->get(); $posts->each(function ($item, $key) use (&$id) { //потом надо посчитать, сколько таких одинаковых статей $countPosts = DB::table('category_image')->where('image_id', $item->image_id)->count(); //если есть ещё эта статья в другой категории //то удалить только дубликаты if($countPosts != 1) { self::deletePivot($id, $item->image_id); if(Category::find($id)) { Category::find($id)->delete(); } } else { self::deletePivot($id, $item->image_id); Storage::delete(Image::find($item->image_id)->image); Image::destroy($item->image_id); if(Category::find($id)) { Category::find($id)->delete(); } } }); if(Category::find($id)) { Category::find($id)->delete(); }; } PHP: public static function deletePivot($categoryId, $imageId) { DB::table('category_image')->where([ ['category_id', '=', $categoryId], ['image_id', '=', $imageId], ])->delete(); } ////////////////////////////////////////////////////////////////////////////////////////// Переделал на такую штуку PHP: public function destroy($id) { $posts = collect(DB::table('category_image')->select('image_id')-> where('category_id', $id)->get()->implode('image_id', ',')); $deletePivot = explode(',', $posts->values()->first()); $relation = Category::find($id); $relation->article()->detach($deletePivot); $relation->delete(); $notCategories = Image::doesntHave('categories')->get(); $notCategories->each(function($item, $key){ Storage::delete($item->image); $item->delete(); }); //Category::deleteCategory($id); return redirect()->route('admin.categories'); } Так лучше? Как можно ещё лучше отрефакторить?
Никак не могу додуматься, как вывести город у пользователя. PHP: $masters = Master::find($id)->users()->get(); Вот такая коллекция возвращается PHP: "id" => 1 "name" => "DimaK" "email" => "dima@yandex.ru" "email_verified_at" => null "password" => "$2y$10$iPrse1TeMPaZ9Q19wpyZveNW.EXNIiV3RDx.QpHVGR4FwkFEiYmSG" "remember_token" => null "created_at" => "2018-09-25 07:26:24" "updated_at" => "2018-09-30 07:01:26" "avatar" => "uploads/users/ava.png" "city_id" => 4014 "description" => "2222" "pivot_master_id" => 3 "pivot_user_id" => 1 Надо как-то добавить для каждого пункта коллекции, город пользователя, отыскать его по полю city_id Я делаю так PHP: dd(City::where('city_id', $masters[0]->city_id)->get()[0]->name); Но думаю это неправильно, и не знаю, как потом перезаписать коллекцию, ведь пользователей будет много. Можно ли как-то сделать цикл, где я буду делать запрос для каждого пользователя И потом как-то добавить это поле в коллекцию? Или есть более лучший способ? PHP: $masters = Master::find($id)->users()->get(); foreach($masters as $master){ echo City::where('city_id', $master->city_id)->get()[0]->name; }
Я сделал так допустимо ли? PHP: $masters = Master::find($id)->users()->get(); $collection = $masters->each(function ($item, $key){ array_add($item, 'cityName', City::where('city_id', $item->city_id)->get()[0]->name); }); dd($collection);
Вот вечно у тебя беда с неймингом PHP: $master = Master::find($id)->with('users.city') // или $users = Master::find($id)->users()->with('city') + belongsTo
После объединения таблиц, я вывожу данные, используя ключ 0, можно ли как-то выводить по другому, без этого нуля? Например, объединил таблицу юзеров и городов PHP: $user = User::with('city')->where('id', $userId)->get(); Результат: Код (Text): Collection {#671 ▼ #items: array:1 [▼ 0 => User {#572 ▼ #fillable: array:3 [▶] #hidden: array:2 [▶] #connection: "mysql" #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:10 [▶] #original: array:10 [▼ "id" => 1 "name" => "DimaK" "email" => "dima@yandex.ru" "email_verified_at" => null "password" => "$2y$10$iPrse1TeMPaZ9Q19wpyZveNW.EXNIiV3RDx.QpHVGR4FwkFEiYmSG" "remember_token" => "UBS9XPcx7Q0n8E5qFc3W0vhhbFw8LY9MCz10hiR6Q374e1mItVEVOxz5ro8a" "created_at" => "2018-09-25 07:26:24" "updated_at" => "2018-09-30 16:56:26" "avatar" => "uploads/users/ava.png" "description" => "2222" ] #changes: [] #casts: [] #dates: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: array:1 [▼ "city" => Collection {#670 ▼ #items: array:1 [▼ 0 => City {#663 ▼ #connection: "mysql" #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:4 [▼ "id" => 4019 "country_id" => 3159 "region_id" => 3994 "name" => "Сыктывкар" ] #original: array:6 [▼ "id" => 4019 "country_id" => 3159 "region_id" => 3994 "name" => "Сыктывкар" "pivot_user_id" => 1 "pivot_city_id" => 4019 ] Город вывожу так PHP: //dd($user[0]->city[0]->name);