Laravel - 如何查找外键值
Laravel - How to find foreign key value
第一次与 Laravel 和 PHP 合作。我正在尝试在 table profile 中插入行,其中属性 uID 是引用 user [=27 上的 uID 的外键=],但出现错误。如何仅插入配置文件的摘要属性并自动设置 uID(外键)。我可以毫无问题地插入具有 uID 的用户。这是我的模型和控制器文件。谢谢!
用户模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class user extends Model
{
// specify which attributes can be filled out during registration
public $timestamps = false;
protected $fillable=['firstname','lastname','email','password',];
public function profile(){
return $this->hasOne(profile::class);
}
}
个人资料模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class profile extends Model
{
//
public $timestamps = false;
protected $fillable = ['summary',];
public function user(){
return $this->belongsTo(user::class);
}
}
配置文件迁移
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProfilesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// create profile table
Schema::create('profiles', function (Blueprint $table) {
$table->increments('pID');
$table->timestamp('created_at')->useCurrent();
$table->string('summary')->default('');
$table->unsignedInteger('uID');
$table->foreign('uID')->references('uID')->on('users')->onDelete('cascade');
});
}
}
配置文件控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\profile;
class ProfileController extends Controller
{
public function create()
{
//
return view('profile.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
// used to store user profile after validation
$this->validate($request,[
'summary' => 'required'
]);
$profile = new profile([
'summary' => $request->get('summary'),
'uID' => $request->user()->uID
]);
return redirect()->route('profile.create')->with('success','Profile created');
}
}
欢迎来到Laravel :)
在用户方法的配置文件模型中,您需要定义外键。
public function user(){
return $this->belongsTo(user::class, 'uID');
}
如果您不提供外键,它将查找 user_id
字段。
好的,有几件事可能需要解决:
用 capitalised letter
声明你的 类。它是 Profile
而不是 profile
。也避免复数。有关更多信息,请阅读 PSR-x
;
您在 foreign keys
方面偏离了 laravel 方式。因此,您需要在关系中指定要连接的键:
此外,请注意我是如何将您的方法名称从 user -> users
更改为
public function users()
{
return $this->belongsTo(user::class, 'id', 'uID');
}
以及您的个人资料关系:
public function profiles(){
return $this->hasOne(profile::class, 'uID', 'id');
}
你好把你的数据库放在这里并向模型添加外键
第一次与 Laravel 和 PHP 合作。我正在尝试在 table profile 中插入行,其中属性 uID 是引用 user [=27 上的 uID 的外键=],但出现错误。如何仅插入配置文件的摘要属性并自动设置 uID(外键)。我可以毫无问题地插入具有 uID 的用户。这是我的模型和控制器文件。谢谢!
用户模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class user extends Model
{
// specify which attributes can be filled out during registration
public $timestamps = false;
protected $fillable=['firstname','lastname','email','password',];
public function profile(){
return $this->hasOne(profile::class);
}
}
个人资料模型
namespace App;
use Illuminate\Database\Eloquent\Model;
class profile extends Model
{
//
public $timestamps = false;
protected $fillable = ['summary',];
public function user(){
return $this->belongsTo(user::class);
}
}
配置文件迁移
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProfilesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// create profile table
Schema::create('profiles', function (Blueprint $table) {
$table->increments('pID');
$table->timestamp('created_at')->useCurrent();
$table->string('summary')->default('');
$table->unsignedInteger('uID');
$table->foreign('uID')->references('uID')->on('users')->onDelete('cascade');
});
}
}
配置文件控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\profile;
class ProfileController extends Controller
{
public function create()
{
//
return view('profile.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
// used to store user profile after validation
$this->validate($request,[
'summary' => 'required'
]);
$profile = new profile([
'summary' => $request->get('summary'),
'uID' => $request->user()->uID
]);
return redirect()->route('profile.create')->with('success','Profile created');
}
}
欢迎来到Laravel :)
在用户方法的配置文件模型中,您需要定义外键。
public function user(){
return $this->belongsTo(user::class, 'uID');
}
如果您不提供外键,它将查找 user_id
字段。
好的,有几件事可能需要解决:
用
capitalised letter
声明你的 类。它是Profile
而不是profile
。也避免复数。有关更多信息,请阅读PSR-x
;您在
foreign keys
方面偏离了 laravel 方式。因此,您需要在关系中指定要连接的键:
此外,请注意我是如何将您的方法名称从 user -> users
更改为public function users()
{
return $this->belongsTo(user::class, 'id', 'uID');
}
以及您的个人资料关系:
public function profiles(){
return $this->hasOne(profile::class, 'uID', 'id');
}
你好把你的数据库放在这里并向模型添加外键