我忘了我已經通過了 $weekends id 所以我做了這個公共功能
show(Weekend $weekend)
{
$id = $weekend->id;
$teams = DB::table('weekends')
->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
->where('weekend_team_members.weekends_id', $id)
->get();
return view('pages.weekend')->with(['weekend' => $weekend,'teams'=> $teams]);
}
此代碼僅在我將 ->where('weekend_team_members.weekends_id', '=','weekends.id') 更改為 ->where('weekend_team_members.weekends_id', '=',2) 時才有效,否則它是一個空陣列。我相信它可能很簡單,但我無法弄清楚。
這是我的加入宣告
$teams = DB::table('weekends')
->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
->where('weekend_team_members.weekends_id', '=','weekends.id')
->get();
周末模特
<?php
namespace App\Models\Webmaster;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Weekend extends Model
{
use HasFactory;
protected $fillable = ['title','verse','songtitle','songvideo','image'];
public function weekendTeamMembers() {
return $this->hasMany(App\Models\Webmaster\WeekendTeamMember::class);
}
}
周末團隊成員模型
<?php
namespace App\Models\Webmaster;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class WeekendTeamMember extends Model
{
use HasFactory;
protected $fillable = ['firstname','lastname','position'];
public function weekend() {
return $this->belongsTo(App\Models\Webmaster\Weekend::class);
}
}
uj5u.com熱心網友回復:
您正在尋找whereColumn()方法:https : //laravel.com/docs/8.x/queries#additional-where-clauses(向下滾動一點)。現在,您正在搜索文字字串weekends.id:
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = 'weekends.id'
該whereColumn()會確保你正在做正確的SQL:
SELECT * FROM `weekends` JOIN ... WHERE `weekend_team_members`.`weekends_id` = `weekends`.`id`
注意單引號和反引號的使用區別:
= 'weekends.id'
= `weekends`.`id`
一個是字串,一個是DB列,會產生不同的結果。
因此,您的最終查詢將是:
$teams = DB::table('weekends')
->join('weekend_team_members', 'weekend_team_members.weekends_id', '=', 'weekends.id')
->select('weekend_team_members.firstname','weekend_team_members.lastname','weekend_team_members.position')
->whereColumn('weekend_team_members.weekends_id', 'weekends.id')
->get();
(注意:這=是隱含的,它是可選的,但->whereColumn('weekend_team_members.weekends_id', '=', 'weekends.id')也是有效的)
uj5u.com熱心網友回復:
首先,如果不定義列,weekend_team_members.weekends_id 將無法在本地作業。Laravel 期望它是周末 ID(單數)。
其次,您的 where() 子句不接受列名作為引數,即使接受,也不會執行任何操作。您在那里描述的“位置”已經由您的 ->join() 方法完成(這就是內部聯接)。
第三,無論如何加入的目的是什么?您只是從周末團隊成員表中選擇列。
如果目的是過濾掉沒有周末 ID 的周末團隊成員,那么您只需要執行 ->whereNotNull('weekend_id')。如果您想從周末表中選擇一些列,您已經可以從您創建的聯接中進行選擇。
如果您正在尋找屬于特定周末的團隊成員,那么您需要將 ID 傳遞給它(否則查詢如何知道您正在尋找哪個周末?)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330772.html
