Я знаю, как создать модель — php artisan make:model nameofmodel
Я знаю, что при переносе модели я должен объявить, какие столбцы будут в таблице:
class CreateNameofmodelTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('nameofmodels', function(Blueprint $table)
{
$table->increments('id');
$table->string('name')->unique();
$table->string('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('nameofmodels');
}
}
Но если я хочу связать две модели, используя FK, какие конфигурации я должен установить в файле миграции или в файле модели?
Предположим, у вас есть другой пользователь модели с именем таблицы users
, Вы можете иметь определенные отношения между addresses
а также users
как следует,
public function up()
{
Schema::create('addresses', function(Blueprint $table)
{
$table->increments('id');
$table->string('add1');
$table->string('add2');
$table->string('city');
$table->string('contact_no');
$table->enum('is_primary',['yes','no'])->default('no');
$table->integer('user_id')->unsigned();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
В классе модели User,
class User extends Model {
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
public function addresses()
{
return $this->hasMany('App\Address');
}
}
в адресном классе
class Address extends Model {
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'addresses';
public function user()
{
return $this->belongsTo('App\User');
}
}
Более подробную информацию о создании таблицы можно найти на официальном Схема Документов на Ларавеле. И еще информация о корабле Отношения Вот
ОБНОВИТЬ
В соответствии с этот вопрос, вам придется создать ссылочную таблицу, прежде чем ссылаться на таблицу. В нашем случае users
должен существовать до запуска миграции, чтобы создать addresses
Таблица.
Простой вариант использования
Предположим, что в контроллере вы хотите узнать, сколько адресов имеют конкретные пользователи, вы можете сделать следующее:
$addressCount = User::find($userId)->addresses->count();
пожалуйста, обратите внимание User::find($userId)->addresses
возвращает коллекцию связанных моделей, в то время как User::find($userId)->addresses()
возвращает объект типа HasMany
Вы также можете пройти сбор, как показано ниже,
foreach(User::find($userId)->addresses as $address)
{
echo '<pre>';
print_r($address);
}
С другой стороны, вы можете связать пользователя с конкретным адресом, как показано ниже,
$user = Address:find($addressId)->user; //returns object of type `User`
echo $user->first_name;
следующая воля не Работа
$user = Address:find($addressId)->user(); //returns object of type `belongsTo`
echo $user->first_name;
Обратите внимание, выше Address:find($addressId)->user
не будет возвращать коллекцию, но единственный объект класса User. Это потому что belongsTo
отношения.
Надеюсь, я все прояснил для вас. Но ничего так хорошо, как официальный документы.
Laracast видео еще лучше ладить с Laravel.
Вы можете использовать как это …
class CreateNameofmodelTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('nameofmodels', function(Blueprint $table)
{
$table->increments('id');
$table->string('name')->unique();
$table->string('description');
$table->timestamps();
});
Schema::create('your table name', function(Blueprint $table) {
$table->foreign('user_id')->references('id')->on('nameofmodels');
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('nameofmodels');
}
}
проверить это .. может быть, это работает отлично ….