Laravel Почему сводная таблица пуста? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть простые отношения в laravel eroquent

Вот создание таблицы претендентов

public function up()
{
    Schema::create('bidders', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('params_name');
        $table->string('params_value');
        $table->string('bidder_name');
        $table->timestamps();
    });
}

Вот bidder_parameter создание таблицы

public function up()
{
    Schema::create('bidder_parameters', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('bidder_id');
        $table->foreign('bidder_id')->references('id')->on('bidders')->onDelete('cascade');
        $table->timestamps();
    });
}

Вотмодель претендента

class Bidder extends Model
{
    protected $table = 'bidders';

    protected $fillable = [
        "params_name",
        "params_value",
        "bidder_name"
    ];

    public function page()
    {
        return $this->hasMany('App\Page');
    }

    public function parameters()
    {
        return $this->hasMany('App\BidderParameter');
    }
}

и вот BidderParameter модель

class BidderParameter extends Model
{
    public function parameters()
    {
        return $this->belongsTo('App\Bidder');
    }
}

Здесь находится контроллер параметров для вставки данных в базу данных

public function store(Request $request){
        // dd($request);
        if($request->ajax())
        {
            $rules = array(
                'params_name.*'  => 'required',
                'params_value.*'  => 'required',
                'bidders_name.*' => 'required'
            );
            $error = Validator::make($request->all(), $rules);
            if($error->fails())
            {
                return response()->json([
                    'error'  => $error->errors()->all()
                ]);
            }
            $params_name = $request->params_name;
            $params_value =$request->params_value;
            $bidders_name =$request->bidders_name;
            for($count = 0; $count < count($params_name); $count++)
            {
                $data = array(
                    'params_name'   => $params_name[$count],
                    'params_value'  => $params_value[$count],
                    'bidders_name'  => $bidders_name[$count],
                );

                $insert_data[] = $data; 
                // dd($insert_data);

            }
            Bidders:insert($insert_data);
            return response()->json([
                'success'  => 'Data Added successfully.'
            ]);
        }
    }

Теперь, когда я отправляюданные в базу данных 'таблица претендентов have data saved into it but bidder_parameter` пусто

Что не так с моим кодом?

1 Ответ

1 голос
/ 05 ноября 2019

Отношение ко многим ко многим содержит 3 таблицы. 2 таблицы являются основными, а 3-я таблица представляет собой комбинацию первичных ключей этих 2 таблиц.

Например,

Пользователь может иметь несколько ролей

и

Роль может принадлежать многим пользователям

, так что требуется отношение многих ко многим

Итак, нам нужна схема базы данных, подобная этой:

  1. Users table -> (id, name ,...) e.g. Jonn Doe with id 1
  2. Roles table -> (id, name, ...) e.g. SUPER_ADMIN with 1
  3. role_user table (id, user_id, role_id) role_id - внешний ключ roles table, а user_id - внешний ключ users table

Сейчасв классах модели:

In  User Model

public function roles(){
   return $this->belongsToMany(Role::class,'role_user','user_id','role_id');
}

Теперь в классе ролей

public function users(){
   return $this->belongsToMany(User::class,'role_user','role_id','user_id');
   //note keys are in opposite order as in roles() method
}

Теперь вы можете вызывать функцию из User экземпляра и Role экземпляра, где хотите

$user->roles // as collection
$user->roles() // as eloquent instance

Также

$role->users // as collection
$role->users() // as eloquent instance

Вы можете узнать больше здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...