Предполагается, что в Article есть только одна компания или один пользователь. Правильный способ сделать это - создать одно-многим (полиморфное) отношение, создав таблицу со следующими столбцами:
{article_id, articleable_id, articleable_type}
а затем определить его в вашей модели
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
/**
* Get all of the owning articleable models.
*/
public function articleable()
{
return $this->morphTo();
}
}
и таблица Users: -
class Userextends Model
{
/**
* Get all of the user's articles.
*/
public function articles()
{
return $this->morphMany('App\Article', 'articleable');
}
}
и то же в модели компании: -
class Company extends Model
{
/**
* Get all of the companies articles.
*/
public function articles()
{
return $this->morphMany('App\Article', 'articleable');
}
}
и затем вы можете получить связь, используя: -
$user = App\User::find(1);
foreach ($user->articles as $article) {
// do this
}
как уже упоминалось здесь
но если статья может иметь больше, чем пользователь или компания, то вам придется сделать много-много полиморфных, как упомянуто здесь