Merhaba,
$relationShip = [
'mappings' => function ($query) use ($marketPlaceCategory) {
$query->withWhereHas('hAttributeValue', function ($query) {
$query->withWhereHas('hAttribute');
});
$query->withWhereHas('mAttributeValueMappings', function ($query) use ($marketPlaceCategory) {
$query->whereHas('mAttributeValueCategoryMappings', function ($query) use ($marketPlaceCategory) {
$query->where('mCategoryID', $marketPlaceCategory);
$query->where('status', 1);
});
$query->withWhereHas('mAttributeValue');
});
}];
$database_list_product = Product::on($this->customer_connection)
->whereIn('id', $productIdList)
->with([
'hAttributeValue1',
'hAttributeValue2',
'hAttributeValue3',
'hBrand',
$this->targetPlatformFolderName . 'ProductTask' => function ($query) use ($relationShip) {
$query->where('integrationID', $this->integrationID);
$query->with($relationShip);
}
])
->get();
Yukarıda örnek olarak sorgulanan bazı ürünlerin kendi veritabanındaki verilerini alıyorum. Fakat bir ilişkimi farklı tablodan almam lazım. İlişkiyi alt sorgularda çalıştıramadım.
Product Model:
public function platformProductTask(): HasMany
{
return $this->hasMany(PlatformProductTask::class, 'hProductID');
}
Product Task Model:
public function mappings(): HasMany
{
return $this->hasMany(ProductTaskMappingsNew::class, 'taskID', 'id');
}
Mapping Model:
public function mAttributeValueMappings(): BelongsTo
{
return $this->belongsTo(AttributeValueMappings::class, 'mAttributeValueMappingsID');
}
Attribute Value Mappings Model:
class AttributeValueMappings extends Model
{
protected $connection = 'server2_mysql';
}
Mantığıma göre bu ilişkiyi bu bağlantıya göre yapması lazım ama bunu görmüyor.
İlave olarak şu şekilde de bir kullanım denedim.
public function mAttributeValueMappings(): BelongsTo
{
return $this->setConnection('server2_mysql')->belongsTo(AttributeValueMappings::class, 'mAttributeValueMappingsID');
}
Normalde 1.kademe ilişkide çalışıyor. 2 veya 3 ilişki iç içe geçirdiğimde çalıştıramadım.