02_5_OneToOne - hpscript/laravel GitHub Wiki

$ php artisan make:model Address -m

migration file

{
        Schema::create('addresses', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned()->nullable();
            $table->string('name');
            $table->timestamps();
        });
    }

$ php artisan migrate

User.php

public function address(){
        return $this->hasOne('App\Address');
    }

//data挿入

mysql> use onetoone;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_onetoone |
+--------------------+
| addresses          |
| migrations         |
| password_resets    |
| users              |
+--------------------+
4 rows in set (0.00 sec)

mysql> insert into users (name, email, password) values ('peter', 'peter@gmail', '1234');
Query OK, 1 row affected (0.00 sec)

Address.php

class Address extends Model
{
    //
    protected $fillable = [
    	'name'
    ];
}

route.php

Route::get('/insert', function(){

	$user = User::findOrFail(1);
	$address = New Address(['name'=>'1234 Huston av NY NY 11218']);
	$user->address()->save($address);
});
mysql> select * from addresses;
+----+---------+----------------------------+---------------------+---------------------+
| id | user_id | name                       | created_at          | updated_at          |
+----+---------+----------------------------+---------------------+---------------------+
|  1 |       1 | 1234 Huston av NY NY 11218 | 2019-12-08 04:19:29 | 2019-12-08 04:19:29 |
+----+---------+----------------------------+---------------------+---------------------+
1 row in set (0.00 sec)

$user->save();のところを、hasOneでは$user->address()->save($address);って書くんだ。I aint know what's going on inside.

update

Route::get('/update', function(){

	$address = Address::where('user_id', 1)->first();

	$address->name = "4532 Updated new address";
	$address->save();
});

read

Route::get('/read', function(){

	$user = User::findOrFail(1);

	return $user->address->name;	
});

delete

Route::get('/delete', function(){

	$user = User::findOrFail(1);

	$user->address()->delete();
	
});