亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取另一個表中不存在的所有項目

獲取另一個表中不存在的所有項目

PHP
郎朗坤 2023-10-15 16:35:23
我正在使用Laravel Framework 6.16.0并且有兩個表,logos并且companies:標志:        Schema::create('logos', function (Blueprint $table) {            $table->bigIncrements('id');            $table->integer('companies_id')->default('999999');            $table->string('logo_path')->nullable($value = true); // path to the logo image            $table->timestamps();        });公司:        Schema::create('companies', function (Blueprint $table) {            $table->bigIncrements('id');            $table->string('symbol'); // AAPL            $table->string('name'); // company name such as Apple Inc.            $table->timestamps();        });楷模:class Logo extends Model{    protected $table = 'logos';    protected $guarded = ['id'];    public function company()    {        return $this->belongsTo(Company::class, 'companies_id');    }}class Company extends Model{    protected $table = 'companies';    protected $guarded = ['id'];}我想獲取 中沒有徽標logo-table且徽標尚未更新的所有符號90 days。我嘗試了以下方法:        $symbolsWithoutLogos = DB::table('companies')            >leftJoin('logos', 'companies.id', '=', 'logos.companies_id')            ->whereDate('logos.updated_at', Carbon::now()->subDays(90))            ->whereNull('companies.logo_image')            ->orderBy('name', 'ASC')            ->get('companies.*');該查詢的結果是:select `companies`.* from `companies` left join `logos` on `companies`.`id` = `logos`.`companies_id` where date(`logos`.`updated_at`) = ? order by `name` asc但是,即使我的公司表有足夠的記錄,運行此查詢時我也得不到結果:有什么建議我做錯了什么嗎?我很感謝你的回復!
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

您可以使用 Eloquent 來實現此目的,而不是使用左連接和數據庫外觀。


我猜公司和Logo之間的關系是1:1或1:n。如果我們假設它是 1:1 那么你的查詢將如下所示:


Company::whereHas('logo', function($query) {

? ? return $query->where('date', '<', Carbon::now()->subDays(90));

})->orWhereDoesntHave('logo')->...

您應該檢查:查詢關系缺失

只要我們遵循 Laravel 命名約定,我們就不需要指定表名,Laravel 會從模型名稱中找出它。

標志模型應該是這樣的:

class Logo extends Model

{

? ? // protected $table = 'logos';?

? ? // not necessary, Laravel already knows to use logos table


? ? protected $guarded = ['id'];


? ? public function company()

? ? {

? ? ? ? // return $this->belongsTo(Company::class, 'companies_id');

? ? ? ? // no need to specify foreign key if we follow naming convention

? ? ? ? // foreign key should be {foreign_model_singular}_id

? ? ? ? // in this case it is company_id

? ? ? ? return $this->belongsTo(Company::class);

? ? }

}

Company 模型也不需要指定表名,它已經知道它應該是Companies。


公司模式:


class Company extends Model

{

? ? // protected $table = 'companies';


? ? protected $guarded = ['id'];


? ? public function logo()

? ? {

? ? ? ? return $this->hasOne(Logo::class);

? ? }

}

請檢查 $guarded 和 $fillable 屬性如何工作。如果只有id設置為受保護,則所有其他屬性均不受保護,不確定這是否是您的意圖。


完整的查詢應該是:


Company::whereHas('logo', function($query) {

? ? return $query->where('updated_at', '<', Carbon::now()->subDays(90));

})->orWhereDoesntHave('logo')

->orderBy('name', 'ASC')

->get();


查看完整回答
反對 回復 2023-10-15
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

->whereDate('logos.updated_at' whereDate 僅比較 dateTime 列的日期部分 ... 嘗試使用 Carbon 的 toDateString() ...


  $symbolsWithoutLogos = DB::table('companies')

            ->leftJoin('logos', 'companies.id', '=', 'logos.companies_id')

                ->whereDate('logos.updated_at', Carbon::now()->subDays(90)->toDateString())

                ->whereNull('companies.logo_image')

                ->orderBy('name', 'ASC')->select('companies.*')

                ->get();


查看完整回答
反對 回復 2023-10-15
  • 2 回答
  • 0 關注
  • 168 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號