From aea93bd05945a3a0c3654a6dffc66b3ccf3d499c Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Sun, 22 Sep 2019 15:53:12 +0200 Subject: [PATCH] Various improvements --- src/Relations/BelongsToThrough.php | 18 +++++++++++++----- src/Traits/BelongsToThrough.php | 3 +-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Relations/BelongsToThrough.php b/src/Relations/BelongsToThrough.php index 0e41c1c..56f0209 100644 --- a/src/Relations/BelongsToThrough.php +++ b/src/Relations/BelongsToThrough.php @@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Expression; use Illuminate\Support\Str; class BelongsToThrough extends Relation @@ -128,7 +127,7 @@ protected function getForeignKeyName(Model $model) */ public function hasSoftDeletes(Model $model) { - return in_array(SoftDeletes::class, class_uses_recursive(get_class($model))); + return in_array(SoftDeletes::class, class_uses_recursive($model)); } /** @@ -262,9 +261,7 @@ public function getRelationExistenceQuery(Builder $query, Builder $parent, $colu $foreignKey = $parent->getQuery()->from.'.'.$this->getFirstForeignKeyName(); - $foreignKey = new Expression($query->getQuery()->getGrammar()->wrap($foreignKey)); - - return $query->select($columns)->where( + return $query->select($columns)->whereColumn( $this->getQualifiedFirstLocalKeyName(), '=', $foreignKey @@ -316,4 +313,15 @@ public function getQualifiedFirstLocalKeyName() { return end($this->throughParents)->getQualifiedKeyName(); } + + /** + * Make a new related instance for the given model. + * + * @param \Illuminate\Database\Eloquent\Model $parent + * @return \Illuminate\Database\Eloquent\Model + */ + protected function newRelatedInstanceFor(Model $parent) + { + return $this->related->newInstance(); + } } diff --git a/src/Traits/BelongsToThrough.php b/src/Traits/BelongsToThrough.php index 687b8e3..5604457 100644 --- a/src/Traits/BelongsToThrough.php +++ b/src/Traits/BelongsToThrough.php @@ -20,8 +20,7 @@ trait BelongsToThrough */ public function belongsToThrough($related, $through, $localKey = null, $prefix = '', $foreignKeyLookup = []) { - /** @var \Illuminate\Database\Eloquent\Model $relatedInstance */ - $relatedInstance = new $related; + $relatedInstance = $this->newRelatedInstance($related); $throughParents = []; $foreignKeys = [];