我正在学习关系。 我学生的错误在哪里 - 性别关系?
学生表:
Schema::create('students', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('gender_id')
->unsigned()
->references('id')
->on('genders')
->onDelete('cascade');
$table->timestamps();
});
性别表:
Schema::create('genders', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
StudentsController
use App\Student;
use App\Gender;
class StudentsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$students = Student::all();
return view('index', compact('students'));
}
Index.blade
<pre>{{var_dump($students[0]->gender_id->name)}}</pre>
错误消息$学生中没有任何对象。
Trying to get property of non-object
性别模型:
public function students() {
return $this->hasMany('App\Student');
}
学生模特:
public function gender() {
return $this->belongsTo('App\Gender');
}
答案 0 :(得分:0)
您需要使用关系方法/属性访问关系,而不是相关字段。因此,您需要使用gender
,而不是gender_id
。
<pre>{{var_dump($students[0]->gender->name)}}</pre>
请注意,如果学生没有相关性别,您将收到相同的错误。
答案 1 :(得分:0)
为什么要为性别创建新表?每个学生只有一个性别(女性/男性),因此无需将其保存在另一个表格中,只需在学生表格中设置性别列,如果您需要所有男性学生,请运行此项:
男学生:
$males = Student::where('gender', 'male')->get();
女学生:
$females = Student::where('gender', 'female')->get();