У меня довольно сложная проблема.
Прежде всего, вот мои модели:
1) МеткиAdybooks
<?php namespace App; use App\Livres; use Illuminate\Database\Eloquent\Model; use Auth; class tagsAdybooks extends Model {
public function getid()
{
return $this->id;
}
/**
* Protège une table
* @var string
*/
protected $table = 'tags_adybooks';
/**
* Permet de voir quel champs sont modifiable
* @var array
*/
protected $fillable = [
'titre_fr','titre_en','slug_fr','slug_en','numero','principal','tags_adybooks_id'];
/**
*Annule la fonction create et update automatique
* @var bool
*/
public $timestamps = false;
/*
* Liaison livres et Tags
*/
public function livres(){
return $this->belongsToMany(Livres::class,'livres_has_tags_adybooks');
}
public function livresTags(){
return $this->belongsToMany(Livres::class,'livres_has_tags_adybooks')->where('nouveaute','=',1)->where('actif','=',1)->whereHas('disponible',function ($query){
$query->where('id','=',1);
})->orderBy('id','desc');
}
public function livresOffice(){
return $this->belongsToMany(Livres::class,'livres_has_tags_adybooks')->where('date_office','desc')->get()->groupBy('date_office');
}
public function children() {
return $this->hasMany( tagsAdybooks::class,'tags_adybooks_id','id')->orderBy('titre_'.\App::getLocale(),'asc')->has('livres');
}
public function parent() {
return $this->belongsTo(tagsAdybooks::class,'tags_adybooks_id');
}
2) Livres:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Auth;use Cart; use Carbon\Carbon; class Livres extends Model{
/**
* Protège une table
* @var string
*/
protected $table = 'livres';
/**
* Permet de voir quel champs sont modifiable
* @var array
*/
protected $fillable = [
'titre','sous_titre','description','photo','apercu','video','disponibilite','prix_ttc','prix_promo','langue',
'isbn','ean_13','date_parution','date_office','format','prix_lancement','faconnage','nbre_page','typesID','collection','clil','nouveaute'];
/**
*Annule la fonction create et update automatique
* @var bool
*/
public $timestamps = false;
protected $casts = [
'clil' => 'array',
];
/*
* Liaison like et livres :
*/
public function likes()
{
return $this->morphToMany(User::class, 'like')->whereDeletedAt(null);
}
public function tagAdybooks(){
return $this->belongsToMany(tagsAdybooks::class,'livres_has_tags_adybooks');
}
Я бы хотел ихчтобы выбрать все теги и книги, которые являются основными и имеют книги, или все теги и книги, которые являются основными, и у их детей есть книги
Чтобы сделать это, я попробовал совместное: $tags=tagsAdybooks:: join('livres_has_tags_adybooks', 'tags_adybooks.id', '=', 'livres_has_tags_adybooks.tags_adybooks_id')
->join('livres', 'livres_has_tags_adybooks.livres_id', '=', 'livres.id')
->select( 'tags_adybooks.*')->orderBy('titre_'.App::getLocale(),'asc')->where(function($q){
$q->whereHas('livres');$q->orWhereHas('children');})->get();
или другой запрос: $tags=tagsAdybooks::where('principal','=',1)->orderBy('titre_'.App::getLocale(),'asc')->whereHas('children')->has('livres')->get();
К сожалению, я получаю либо основные теги и книги, в которых есть книги, либо все теги и книги, но не основные.Можете ли вы дать мне руководство, пожалуйста?
Я хотел бы понять, где моя ошибка?