Laravel Eloquent ORM Отношения - PullRequest
       7

Laravel Eloquent ORM Отношения

0 голосов
/ 29 января 2019

У меня проблема с отношениями Eloquent ORM, у меня есть модель компании и модель страны, отношение один ко многим, я использовал следующие коды.

Модель компании

    class Company_model extends Model
    {
        public $table = "company";
        public $primaryKey = "id";

        public function countries(){
            return $this->belongsTo('App\Models\Countries','country','countryId');
        }
    }

Страны Модель

class Countries extends Model
{
    public $table = "countries";
    public $primaryKey = "countryId";


}

Я использовал следующий код, чтобы получить данные, которые я хочу получить вместе с именем страны

$companyObj = new Company_model();

$result = $companyObj::with('countries')->get();

я получаюрезультаты с данными о компании и странах, но данные о странах представлены в виде массива, мне нужно, он идет без массива, также мне нужно взять название страны. Теперь все данные в таблице стран находятся в массиве.

Теперь Результат

Array ( [0] => Array ( [id] => 1 [companyName] => Test [address] => [country] => 1 [phone] => [email] => [website] => [companyImg] => 1 [create_by] => [create_time] =>  [countries] => Array ( [countryId] => 1 [countryName] => Test [currency] => [language] => ) ) ) 

Мне нужен результат как

Array ( [0] => Array ( [id] => 1 [companyName] => Test [address] => [phone] => [email] => [website] => [companyImg] => 1 [create_by] => [create_time] =>  [countryName] => Test  ) ) 

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Вы должны добавить новый метод в Company_model, который имеет метод, который дает только выбранные поля.

class Company_model extends Model
    {
        public $table = "company";
        public $primaryKey = "id";

        public function countries(){
            return $this->belongsTo('App\Models\Countries','country','countryId');
        }
    }

Это новый метод.

public function countriesIDs()
{
   return $this->belongsTo('App\Models\Countries')->select(['name']);
}
0 голосов
/ 29 января 2019

Вы можете сделать это:

$result = Company_model::leftjoin('countries', 'countries.id', '=', 'company.countryId')->select('company.*', 'countries.countryName')->get();

Надеюсь, это будет полезно.

0 голосов
/ 29 января 2019

Это невозможно по запросу "с".Вы должны получить его по запросу присоединения, например:

Company_model::join('countries','countries.countryId','=','company.country')->select('company.*','countries.countryName')->get();
0 голосов
/ 29 января 2019

попробуйте

$result = $companyObj::with('countries')->get()->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...