Проверка состояние переключатель

133
30 июля 2019, 20:30

Есть два баннера, один выводиться на всех страницах, а другой выводиться на странице календаря, в зависимости от того на каком баннере установлен чекбокс вывода на странице календаря, тот баннер и выводиться. Как сделать чтобы при выборе переключателя "Отображать на странице календаря" в одном из баннеров, выполнялась проверка состояния этого переключателя в другом баннере и если он включен - его выключать.

BannerController

<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Models\Banner;
use App\Repositories\BannerRepository;
use App\Http\Requests\StoreBanners;
use Illuminate\Support\Facades\Session;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class BannerController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    protected $fileRepository;
    protected $bannersRepository;
    public function __construct(BannerRepository $bannersRepository)
    {
        $this->bannersRepository = $bannersRepository;
    }
    public function index()
    {
        $banners = Banner::with('translate', 'media')->latest()->paginate();
        return view('admin.banners.index', compact('banners'));
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.banners.create');
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreBanners $request)
    {
        $data = $request->all();
        $banners = $this->bannersRepository->createBanners($data);
        $this->checkAndUploadImage($request, 'poster', 'posters', $banners);
        Session::flash('message', 'Successfully created banner!');
        return redirect()->route('banners.index');
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $banner = Banner::find($id);
        if(empty($banner)){
            abort(404);
        }
        return view('admin.banners.edit', compact('banner'));
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(StoreBanners $request, $id)
    {
        if (!$banners = Banner::find($id)) {
            throw new NotFoundHttpException('Banner not found');
        }
        $data = $request->all();
        $this->checkAndUploadImage($request, 'poster', 'posters', $banners);
        $this->bannersRepository->editBanners($data, $id);
        Session::flash('message', 'Successfully updated banner!');
        return redirect()->route('banners.index');
    }
    public function checkAndUploadImage($request, $fileName, $collection, $model):void {
        if($file = $request->file($fileName)) {
            if($model->getMedia($collection)->first()) {
                $model->getMedia($collection)->first()->delete();
            }
            $model->addMediaFromRequest($fileName)->toMediaCollection($collection);
        }
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        Banner::find($id)->delete();
        return redirect()->route('banners.index');
    }
}

BannerRepository

<?php
/**
 * Created by PhpStorm.
 * User: rise
 * Date: 5/31/2018
 * Time: 6:16 PM
 */
namespace App\Repositories;
use App\Models\Banner;
use App\Models\BannerTranslation;

class BannerRepository extends Repository
{
    /**
     * Specify Model class name
     *
     * @return mixed
     */
    function model()
    {
        return 'App\Models\Banner';
    }
    public function createBanners($data)
    {
        $banner = [
            'is_calendar' => $data['is_calendar'] ?? 0,
        ];
        $banner = $this->create($banner);
        $this->addTranslationBanner($data, $banner->id);
        return $banner;
    }
    public function editBanners($data, $id)
    {
        $array = [
            'is_calendar' => $data['is_calendar'] ?? 0,
        ];
        $this->update($array, ['id' => $id]);
        $banners = Banner::find($id);
        $this->editTranslationBanner($data, $banners);
    }
    public function addTranslationBanner($data, $bannerId)
    {
        foreach (get_languages() as $lang => $val) {
            BannerTranslation::create([
                'banner_id' => $bannerId,
                'language' => $lang,
                'title' => $data['title_' . $lang],
            ]);
        }
    }
    public function editTranslationBanner($data, $banner)
    {
        foreach (get_languages() as $lang => $val) {
            $bannerTranslation = BannerTranslation::where(['banner_id' => $banner->id, 'language' => $lang])->first();
            $bannerTranslation->update([
                'banner_id' => $banner->id,
                'language' => $lang,
                'title' => $data['title_' . $lang],
            ]);
        }
    }
}
Answer 1

Вот что получилось в итоге.

$array = [
            'is_calendar' => $data['is_calendar'] ?? 0,
        ];
        if(isset($data['is_calendar'])){
        Banner::where('id', '<>', $id)->update(['is_calendar' => 0]);
        }
        else{
        Banner::where('id', '<>', $id)->update(['is_calendar' => 1]);
            }
        $this->update($array, ['id' => $id]);
        $banner = Banner::find($id);
        $this->editTranslationBanner($data, $banner);
READ ALSO
Yii2 не работает ajax validation

Yii2 не работает ajax validation

Не могу разобраться с валидацией формы при отправке ajaxУ меня есть виджет с формой, во вьюхе которого находится ActiveForm

115
Реализация поиска пользователей

Реализация поиска пользователей

Есть API которое выдает список пользователей с N количеством параметров у пользователя(имя, телефон

117
Что делать с текстами, в которых присутвуют пустые строки?

Что делать с текстами, в которых присутвуют пустые строки?

Всем привет! Заголовок запроса может быть не понятен, но я сейчас попробую объяснитьНа сервере есть тексты, как эти:

136
Как правильно настроить elasticsearch под неточный поиск?

Как правильно настроить elasticsearch под неточный поиск?

Есть названия товаров к примеру

111