Laravel基于一对一关系插入数据

时间:2018-02-06 08:01:28

标签: php laravel

UserAddress是一对一的关系。

addresses表格包含user_id字段,可将其与用户关联。

可以按如下方式插入数据:

$user = App\User::find($id);
$address = new Address(['name'=>'221B Baker Street']);
$user->address()->save($address);

此处,将addresses表中列名称的关联数组传递给Address()构造函数。但是在Address.php模型中,没有为此定义构造函数。 laravel如何处理这个?

如果我们以对象方式执行,如下所示: 这些的settergetter方法在哪里?

$user = App\User::find($id);
$address = new Address();
$address->name = '221B Baker Street';
$user->address()->save($address);

这是一种数据抽象形式吗?

1 个答案:

答案 0 :(得分:1)

每个模型都扩展Model.php vendor/laravel/framework/src/Illuminate/Database/Eloquent __get(),其中包含魔术方法__set()fill()。这是框架在使用对象方式时动态设置属性的方式。

对于赋予构造函数的数组,在抽象Model类中有方法- (void)logReachability:(Reachability *)reachability { NSString *whichReachabilityString = nil; if (reachability == self.hostReachability) { whichReachabilityString = @"www.apple.com"; NSLog(@" 1"); } else if (reachability == self.internetReachability) { whichReachabilityString = @"The Internet"; NSLog(@" 2"); } else if (reachability == self.wifiReachability) { whichReachabilityString = @"Local Wi-Fi"; NSLog(@" 3"); } NSString *howReachableString = nil; switch (reachability.currentReachabilityStatus) { case NotReachable: { howReachableString = @"not reachable"; break; } case ReachableViaWWAN: { howReachableString = @"reachable by cellular data"; break; } case ReachableViaWiFi: { howReachableString = @"reachable by Wi-Fi"; break; } } NSLog(@" Reachable Via :%@ ", howReachableString); } ,它从构造函数中调用,这样模型就可以从构造函数中获得水分。