Сохранение значения внешнего ключа в соответствующей таблице - Laravel Resource Control - PullRequest
0 голосов
/ 30 октября 2018

У меня есть 2 таблицы: производители и бренды.

Производители: поля: id и производитель

Торговая марка: fields: множество других полей с полем «factory_id», которое индексирует «id» таблицы «Manufacturers».

У меня есть поле выбора, которое должно загрузить поле производителя из таблицы производителей. При хранении в дБ мне нужно хранить «id» производителя в таблице брендов.

Это отношение один к одному, но я не знаю, как это сделать с моделью контроллера ресурсов Laravel. CRUD

У меня также есть внешние ключи настройки

Это BrandsContoller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Brands;
use App\Manufacturer;
use App\Contents;
use App\Usage;
use App\Type;
use App\SideEffect;

class BrandsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $brand_names = Brands::latest()->paginate(5);
        return view('brands.index', compact('brand_names'))->with('i',(request()->input('page',1)-1)*5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {

        // $manufacturerList = Manufacturer::find(2);
        //$brand = Manufacturer::find(3)->brand;
        return view('brands.create', compact('brand'));
    }

    public function test($id){

        $manufacturerss = Manufacturer::find($id);
        return view('test', compact('manufacturer'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        // request()->validate([
        //     'brand_name' => 'required',
        //     'short_description' => 'required',
        //     'manufacturers_id' => 'required',
        //     'contents_id' => 'required',
        //     'usages_id' => 'required',
        //     'types_id' => 'required',
        //     'photo' => 'required',
        //     'side_effects_id' => 'required',
        //     'common_use' => 'required',
        //     'dosage_directions' => 'required',
        //     'precautions' => 'required',
        //     'contradictions' => 'required',
        //     'possible_side_effects' => 'required',
        //     'drug_interactions' => 'required',
        //     'missed_dose' => 'required',
        //     'overdose' => 'required',
        //     'storage' => 'required',
        //     'discalimer' => 'required',
        // ]);
        // $manufacturer->brands()->save($manufacturer);
        // $manufacturer->manufacturer()->associate($manufacturer)->save();

        Brands::create($request->all());
        // $brand = new Brands;
        // $brand -> manufacturer_id = $data-> manufacturer_id;
        // $brand -> save();
        // @foreach($manufacturerList as $item)
        // {

        //     $brand->manufacturer()->create(['manufacturer_id' => $item]);

        // }
        // @endforeach

        return redirect()->route('brands.index')->with('success', 'Brand created succesfully');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $brand_name = Brands::find($id);
        return view('brands.show',compact('brand_name'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $brand_name = Brands::find($id);
        return view('brands.edit', compact('brand_name'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        request()->validate([
            'brand_name' => 'required',
            'short_description' => 'required',
            'manufacturers_id' => 'required',
            'contents_id' => 'required',
            'usages_id' => 'required',
            'types_id' => 'required',
            'photo' => 'required',
            'side_effects_id' => 'required',
            'common_use' => 'required',
            'dosage_directions' => 'required',
            'precautions' => 'required',
            'contradictions' => 'required',
            'possible_side_effects' => 'required',
            'drug_interactions' => 'required',
            'missed_dose' => 'required',
            'overdose' => 'required',
            'storage' => 'required',
            'discalimer' => 'required',
        ]);
        Brands::find($id)->update($request->all());
        return redirect()->route('brands.index')->with('success', 'Brand updated succesfully');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        Brands::find($id)->delete();
        return redirect()->route('brands.index')->with('success', 'Brand sucessfully deleted');
    }
}

Это модель бренда:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Brands extends Model
{
    protected $table = 'brands';
    protected $fillable = ['brand_name','short_description','content_id','usage_id','type_id','photo','side_effect_id','common_use','dosage_directions','precautions','contradictions','possible_side_effects','drug_interactions','missed_dose','overdose','storage','discalimer'];

    public function manufacturer()
    {
    return $this->belongsTo('App\Manufacturer');
    }
}

Это модель производителя:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Manufacturer extends Model
{
    protected $table = 'manufacturers';
    protected $fillable = ['manufacturer'];

    public function brand()
    {
    return $this->hasOne('App\Brands','manufacturer_id');
    }
}

Это мой внешний интерфейс с полем выбора:

<strong>MANUFACTURER : </strong>

      <br>
      <select id="manufacturers" name="manufacturers" class="form-control item_view" placeholder="Please choose" onchange="">
      <option>Select Manufacturer</option>
      <option value="0">Add New</option>


      <option value="" >test</option>



      </select>

Я получаю правильные значения в тинкере, но я не знаю, как сохранить в БД ..

Любая помощь высоко ценится ....

1 Ответ

0 голосов
/ 30 октября 2018

При использовании методов Model :: create () и Model :: update () данные будут отфильтрованы с использованием атрибутов fillable или защищенных в вашей модели.

Поскольку модель вашего бренда не имеет «изготовителя_идентификатора» внутри заполняемого поля, это поле не будет сохранено в базе данных.

Кроме того, вам необходимо присвоить выбранному входному элементу имя «Manufacture_id», чтобы отправить правильный атрибут бэкэнду.

Совет:

  • Я рекомендую использовать Eloquent Model Conventions в ваших моделях, базе данных и отношениях. Например: используйте модель "Бренд", а не модель "Бренды", а также идентификатор производителя, а не производителей. Используя эти соглашения, Laravel Eloquent ORM может легко управлять вашими запросами, а код может быть более четким и лаконичным.
...