我是一名 Laravel 的初学者,在之前从未使用过框架。我创建了一个名为 'tabletest' 的数据库,其中包含两张表。一张是用户表,另一张是电话表。用户表有两列(id 和 name),电话表有三列(id、phone 和 user_id)。我的目标是,通过表单获取输入,并将输入发送到数据库中的相应表格。虽然名称和电话已正确保存在不同的表格中,但外键列 user_id 却没有被更新,始终为 0。现在该怎么办呢?
迁移文件如下:
用户表:
迁移文件如下:
用户表:
public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
手机表格:
public function up()
{
Schema::create('phone', function (Blueprint $table) {
$table->increments('id');
$table->string('phone');
$table->unsignedInteger('user_id');
$table->timestamps();
});
}
用户模型:
use App\Model\Phone;
class User extends Model
{
protected $table = "user";
protected $fillable = ['name'];
public function phone(){
return $this->hasOne(Phone::class);
}
}
手机型号:
use App\Model\User;
class Phone extends Model
{
protected $table = "phone";
protected $fillable = ['phone','user_id'];
public function user(){
return $this->belongsTo(User::class);
}
}
PhoneController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\model\User;
use App\model\Phone;
class PhoneController extends Controller
{
public function store(Request $request)
{
User::create([
'name' => $request->name
]);
Phone::create([
'phone' => $request->phone
]);
}
}
'name' => $request->input('name');
中出现了错误,报告了PhoneController中的致命错误异常。语法错误,意外的';',期望']'。@pistachio - Noob Coder'name' => $request->input('name'),
- Pistachio'name' => $request->input('name'),
因为我理解的是,您从表单中获取了名称属性并将其放入 $user 对象中。然后您使用'user_id'=>$user->id;
从 $user 对象分配 user_id 值。那我为什么需要在我的模型中指定这些行呢?public function user(){ return $this->belongsTo(User::class); }
和public function phone(){ return $this->hasOne(Phone::class); }
- Noob Coder$request
对象包含了所有的 HTTP 请求数据,包括表单数据。因此当你使用$request->input('name')
时,你就是在请求名为name
的输入字段。你所问的phone()
和user()
方法是关系型函数。使用hasOne
表示用户拥有一个电话,而使用belongsTo
表示电话属于一个用户。这是一种一对一的关系。这意味着你可以使用该关系来快速访问用户的电话。假设你有一个视图,需要展示用户的个人资料,你可以这样写:姓名:{{ $user->name }} - 电话:{{ $user->phone->phone }}
。注意我指定了要输出的字段,否则将会输出整个电话对象。 - Pistachio