Я пытаюсь применить условие where к объединенной таблице, но получаю эту ошибку:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cts.plant' doesn't exist (SQL: select * from
tbl_complaintwhere exists (select * fromtbl_plantwheretbl_complaint.made_in_plant=tbl_plant.plant_idandsap_code= 99999) order bycreateddesc limit 50 offset 0)
Мои классы моделей выглядят примерно так:
Основная модель
class Complaint extends Model {
protected $connection= 'first';
protected $table = 'complaint';
protected $primaryKey = 'complaint_id';
public function customerPlant() {
return $this->hasOne(Plant::class, 'plant_id', 'customer_plant_id')
->select('plant_id', 'sap_code', 'plant_name');
}
}
Подключенная модель
class Plant extends Model {
protected $connection= 'second';
protected $table = 'plant';
protected $primaryKey = 'plant_id';
public function getKeyName() {
return 'plant_id';
}
}
Получение данных:
$query = Complaint::with([
'madeInPlantId']
$query = Complaint::whereHas('madeInPlant', function($query){
$query->where('sap_code','=','99999');
});
$query->get();
Я думаю, что проблема в том, что я не указываю, что подключенная таблица находится в другой базе данных.
зачем вам строки подключения? Кроме того, я должен сказать, что без wherehas clausule все работает нормально, я получаю запись с объединенными данными из другой таблицы
потому что, я просто хочу кое-что подтвердить, у нас уже есть настройка, аналогичная вашей. таблицы находятся на одном сервере, но в разных базах данных, все, что нам нужно сделать, это префикс имени базы данных к имени таблицы protected $table = 'database1.plant';
Можете ли вы включить в вопрос текст об ошибке? Темный текст мелким шрифтом на черном фоне практически не читается
я отредактировал вопрос с текстом ошибки
я вижу, что ошибка в моем случае заключается в том, что Eloquent пытается получить данные из базы данных cts, но таблица plant находится в другом db
@Joe большое спасибо, ваше предложение действительно сработало. если вы напишете ответ, я его приму :)






если ваши таблицы находятся на одном сервере, но в разных базах данных, вы можете это сделать.
class Complaint extends Model {
protected $table = 'cts.complaint';
protected $primaryKey = 'complaint_id';
public function customerPlant(){
return $this->hasOne(Plant::class, 'plant_id', 'customer_plant_id')
->select('plant_id', 'sap_code', 'plant_name');
}
}
class Plant extends Model{
protected $table = 'otherdatabase.plant';
protected $primaryKey = 'plant_id';
public function getKeyName() {
return 'plant_id';
}
}
вы можете опубликовать используемые строки подключения?