Сделать строку внешним ключом - Laravel & amp; Mysql [дубликат]

При объединении двух кадров данных с ~ 1 миллионом строк каждый, один с двумя столбцами, а другой с ~ 20, я неожиданно обнаружил, что merge(..., all.x = TRUE, all.y = TRUE) будет быстрее, чем dplyr::full_join(). Это с dplyr v0.4

Merge занимает ~ 17 секунд, full_join занимает ~ 65 секунд.

Некоторое питание, хотя, как правило, я использую dplyr для задач манипуляции.

1
задан jrsalunga 27 March 2014 в 17:23
поделиться

1 ответ

Во-первых, с помощью innoDB вы можете без проблем запускать эти ключи без ключа

. InnoDB позволяет ограничению внешнего ключа ссылаться на не уникальный ключ. Это расширение InnoDB для стандартного SQL.

Mabe у вас неверны ваши таблицы. Попробуйте это

Для резервирования

    Schema::create('reservations', function($table)
    {
        $table->engine = 'InnoDB';
        $table->string('id', 32)->index();
        $table->string('name', 128);
        $table->string('user_id', 32)->references('id')->on('users');
        $table->timestamps();
    });

для пользователей

    Schema::create('users', function($table)
    {
        $table->engine = 'InnoDB';
        $table->string('id', 32)->index();
        $table->string('name', 128);
        $table->timestamps();
    });

, тогда вам нужно создать связь в оговорках

public function user(){
    return $this->belongsTo('User', 'user_id');
}

, и теперь, когда вы выполняете поиск

$reservations = Reservation::with('user')->where('user_id', '=', '22beb4892ba944c8b1895855e1d4d1ad')->get();

, он должен работать! Я тестировал этот код.

5
ответ дан angoru 21 August 2018 в 12:35
поделиться
  • 1
    Великий! оно работает! просто нужно добавить второй параметр user_id из моего $this->belongsTo('User'). большое спасибо! – jrsalunga 27 March 2014 в 18:40
Другие вопросы по тегам:

Похожие вопросы: