질문을 삭제하지 말아주세요.!
 
1
0
-1

어제 부터 이것 때문에 힘드네요 ㅠㅠ;

질문 드립니다.

products 테이블과 Targets 테이블은 many-to-many 관계인데요 다음과 같이 선언 하였습니다.

그리고 shops 및 shopurls 테이블은 ont-to-many 입니다. 그림으로 보면 아래와 같습니다.


<모델들>

<--------------------Product.php

class Product extends Model implements Sendable
{
use CanBeSend;

protected $guarded = [];

public function shop()
{
return $this->belongsTo(Shop::class);
}

public function shopurl()
{
return $this->belongsTo(Shopurl::class);
}


public function targets()
{
return $this->belongsToMany(Target::class);
}

}

--------------------→

<--------------------Target.php

class Target extends Model
{
public function products()
{
return $this->belongsToMany(Product::class);
}
}

--------------------→

<--------------------shop.php

class Shop extends Model
{
public function Products()
{
return $this->hasMany(Product::class);
}
 public function Shopurls()
{
return $this->hasMany(Shopurl::class);
}
}

--------------------→

<--------------------shopurls.php


class Shopurl extends Model
{

public function shop()
{
return $this->belongsTo(Shop::class);
}
public function products()
{
return $this->hasMany(Product::class,Target::class);
}

}

<Controller>


$products = Product::with(['shopurl''shop'])
->where('created_at', '>=', (Input::get('startdate')) ? Input::get('startdate') : Carbon::now()->subDays(7)->format('Y-m-d H:i:s'))
->where('created_at', '<=', (Input::get('enddate')) ? Input::get('enddate') : Carbon::now()->format('Y-m-d H:i:s'))
->where('generation','=',($generation == 'ADULT') ? 'adult' : 'kid')
->orderBy('created_at','desc')
->orderBy('id','desc')
->paginate(15);


위 코드에서는 product / shopurl / shop 함께 가져와 지는 데요, pivot 테이블을 통해 target 을 가지지 않는 product 와 함께 shop 및 shoprul을 뽑아 올려면 어덯게 해야 할까요?

아래와 같이도 해보았습니다만, product 테이블의 timestamp 를 조건으로 넣고 싶은데 안되는것 같습니다.

$products = Target::find(2)->products()->wherePivot('target_enabled',false)
->with(['shopurl','shop'])
//->where('created_at','<=',Carbon::now()->format('Y-m-d H:i:s')) --> 이걸 넣으면 아래와 같이 에러가 납니다.
->orderBy('created_at','desc')
->orderBy('id','desc')
->paginate(15);



읽어주셔서 감사합니다. 조언 부탁드립니다.






  1. dangtong

    2번째 질문은 

    ->where('products.created_at','<=',Carbon::now()->format('Y-m-d H:i:s'))
    테이블 명을 created_at 앞에 써줘서 해결 하였습니다.
  2. dangtong

    죄송합니다. 질문을 제가 너무 두서 없이 한것 같네요. 다시 정리한 다음에 올리도록 하겠습니다.


CommentAdd your comment...

2 answers

  1.  
    2
    1
    0

    꽤 오래된 질문이라 이미 해결하셨을 듯 한데요. 혹시 이거 질문하신건가요? https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-absence 

    저는 생각했던 Raw SQL과 쿼리 빌더에 ->toSql()을 붙여서 덤프한 쿼리를 비교해보며 짭니다.

      CommentAdd your comment...
    1.  
      1
      0
      -1

      넵 감사합니다. 

      결국 질문은 pivot 테이블에 없는 것들을 조회 하는것이었는데요,

      product - pivot(product_target) -Target 

      Product:doesntHave('Targets')→get();

      로 해결 하였습니다.

      감사합니다. ^^

        CommentAdd your comment...