I have two tables in my Laravel project: teacher_subject
and subject
. The teacher_subject
table has three columns: id
, teacher_token
and subject_token
. And the subject table has three columns: id
, subject_token
and subject_name
. teacher_subject
table's subject_token
referencing the subject
table's subject_token
. Now, I want to get the subject_name
of subject_token
wherever the teacher_token
is 1. I want to get it by Laravel's relation method. But, I don't know how to write the function in teacher_subject
model and controller to get the subject_name
. Please tell me how to do a many-to-many relation or hasManyThrough
relation without a third table?
CodePudding user response:
I'm not sure if I understood your question correctly, but is this what you're trying to achieve?
DB::table('teacher_subject')
->select('*')
->join('subject','subject.subject_token','=','teacher_subject.subject_token')
->where('teacher_subject.teacher_token','=',1)
->get();
CodePudding user response:
Well, you certainly don't need hasManyThrough()
as far as I know, hasMany()
would suffice. The following is a solution with just two tables. Try it out, I'm not entirely sure if that's what you want.
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class TeacherSubject extends Model
{
public function subjects()
{
return $this->hasMany(Subject::class, 'subject_token');
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Subject extends Model
{
public function teacherSubjects()
{
return $this->hasMany(TeacherSubject::class, 'subject_token');
}
}
Now, you can do the following
$subject = Subject::with('teacherSubjects')->find(1);
dd($subject, $subject->teacherSubjects);