belongsstomanyテーブルより 'または'条件付きのデータを取得する方法はわかりません。私はレッスンテーブル、チューターテーブル、学生テーブルを持っています。私はファーストネームの変数を渡します。例えば、私が「フレッド」という名前を渡すと、ファーストネーム「フレッド」を持つすべての生徒と教師の名前が必要になります。 私は一致する句を試しましたが、それは正しいことができないようにプライマリモデルからのデータを減らします。私はどこかを使用しますが、私はbelongsstomany関係のためにこれを使用することはできないと思うので、それは動作しませんでした。私はこれがbelongsToMany、belongsToテーブルの 'または'条件でのfindの使い方
クエリが持ってください行うにはどうすればよい見つからないこのコラム:中1054不明な列「Students.first_name」「句」
///lesson model
$this->belongsTo('Tutors', [
'foreignKey' => 'tutor_id',
'joinType' => 'LEFT'
]);
$this->belongsToMany('Students', [
'foreignKey' => 'lesson_id',
'targetForeignKey' => 'student_id',
'joinTable' => 'lessons_students'
]);
$query3 = $this->find()
->contain(['Tutors','Subjects', 'TutoringTypes','Terms','Students'])
->select(['Lessons.id','Lessons.lesson_date','Tutors.id','Tutors.first_name','Tutors.last_name',
// 'Students.id','Students.first_name','Students.last_name',
'Subjects.name','TutoringTypes.value'])
->where(['Lessons.lesson_date >' => $a3 , 'Tutors.first_name like' => '%'.$firstname.'%',
'Tutors.last_name like' => '%'.$lastname.'%' ])
->orWhere(['Students.first_name like' => '%'.$firstname.'%' ])
->order(['Lessons.lesson_date' => 'ASC'])
->hydrate(true);
/*
$query3->matching('Students', function ($q) use ($firstname,$lastname) {
return $q
// ->select(['Students.id','Students.first_name','Students.last_name'])
->where(['Students.first_name like' =>'%'.$firstname.'%','Students.last_name like' =>'%'.$lastname.'%', ]);
});
*/
return $query3;
SELECT
Lessons.id AS `Lessons__id`,
Lessons.lesson_date AS `Lessons__lesson_date`,
Tutors.id AS `Tutors__id`,
Tutors.first_name AS `Tutors__first_name`,
Tutors.last_name AS `Tutors__last_name`,
Subjects.name AS `Subjects__name`,
TutoringTypes.value AS `TutoringTypes__value`
FROM
lessons Lessons
LEFT JOIN tutors Tutors ON Tutors.id = (Lessons.tutor_id)
LEFT JOIN subjects Subjects ON Subjects.id = (Lessons.subject_id)
LEFT JOIN tutoring_types TutoringTypes ON TutoringTypes.id = (Lessons.tutoring_type_id)
LEFT JOIN terms Terms ON Terms.id = (Lessons.term_id)
WHERE
(
Students.first_name like '%fred%'
OR (
Lessons.lesson_date > '2016-01-28'
AND Tutors.first_name like '%fred%'
AND Tutors.last_name like '%%'
)
)
ORDER BY
Lessons.lesson_date ASC
LIMIT
20 OFFSET 0
http://book.cakephp.org/3.0/en/orm/query-builder.html
//generated query from the below answer
SELECT
Lessons.id AS `Lessons__id`,
Lessons.lesson_date AS `Lessons__lesson_date`,
Tutors.id AS `Tutors__id`,
Tutors.first_name AS `Tutors__first_name`,
Tutors.last_name AS `Tutors__last_name`,
Subjects.name AS `Subjects__name`,
TutoringTypes.value AS `TutoringTypes__value`
FROM
lessons Lessons
LEFT JOIN tutors Tutors ON Tutors.id = (Lessons.tutor_id)
LEFT JOIN subjects Subjects ON Subjects.id = (Lessons.subject_id)
LEFT JOIN tutoring_types TutoringTypes ON TutoringTypes.id = (Lessons.tutoring_type_id)
LEFT JOIN terms Terms ON Terms.id = (Lessons.term_id)
WHERE
(
Lessons.lesson_date > '2016-01-28'
AND (
Students.first_name like '%%'
OR Tutors.first_name like '%%'
OR Tutors.last_name like '%%'
)
)
ORDER BY
Lessons.lesson_date ASC
LIMIT
20 OFFSET 0
必要なデータを提供するsqlから始めます。質問のタイトルはあなたの実際の問題とはほとんど関係がないようです。 – AD7six
belongsToMany関係のため、 'matching'クエリがここに移動するはずです。あなたはそれでどんな問題を抱えていましたか?結果セットに追加のデータを含めるには、 'autoFields'を見たいかもしれません。 –
私は一致するクエリを試しましたが、代わりに行を減らしました。名前が同じである両方のテーブルから行が必要です。元の投稿には、一致する句がコメントアウトされています。別の方法があれば、私は何をすべきかわからないので私に見せることができます – ajt