From ca32ae4561f088a132bd933cf8c005d92746d50d Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 2 Mar 2016 12:52:36 +0100 Subject: [PATCH] Fix is / is not already joined. --- app/Models/BaseModel.php | 39 +++++++++++++++++++ app/Models/TransactionJournal.php | 13 +++---- .../Category/SingleCategoryRepository.php | 14 +++---- 3 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 app/Models/BaseModel.php diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php new file mode 100644 index 0000000000..a209a5183c --- /dev/null +++ b/app/Models/BaseModel.php @@ -0,0 +1,39 @@ +getQuery()->joins; + if($joins == null) { + return false; + } + foreach ($joins as $join) { + if ($join->table == $table) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 51fc7fc9e8..1a03020f3a 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -4,7 +4,6 @@ use Auth; use Carbon\Carbon; use Crypt; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\JoinClause; @@ -46,7 +45,7 @@ use Watson\Validating\ValidatingTrait; * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal before($date) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal transactionTypes($types) */ -class TransactionJournal extends Model +class TransactionJournal extends BaseModel { use SoftDeletes, ValidatingTrait; @@ -92,8 +91,6 @@ class TransactionJournal extends Model 'date' => 'required|date', 'encrypted' => 'required|boolean', ]; - /** @var bool */ - private $joinedTypes = false; /** * @param $value @@ -312,8 +309,9 @@ class TransactionJournal extends Model public function scopeExpanded(EloquentBuilder $query) { // left join transaction type: - $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); - $this->joinedTypes = true; + if (!self::isJoined($query, 'transaction_types')) { + $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); + } // left join transaction currency: $query->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transaction_journals.transaction_currency_id'); @@ -356,9 +354,8 @@ class TransactionJournal extends Model public function scopeTransactionTypes(EloquentBuilder $query, array $types) { - if (!$this->joinedTypes) { + if (!self::isJoined($query, 'transaction_types')) { $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); - $this->joinedTypes = true; } $query->whereIn('transaction_types.type', $types); } diff --git a/app/Repositories/Category/SingleCategoryRepository.php b/app/Repositories/Category/SingleCategoryRepository.php index 905c63caa3..fe643a385a 100644 --- a/app/Repositories/Category/SingleCategoryRepository.php +++ b/app/Repositories/Category/SingleCategoryRepository.php @@ -115,13 +115,11 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate { $offset = $page > 0 ? $page * 50 : 0; - return $category->transactionjournals()->withRelevantData()->take(50)->offset($offset) + return $category->transactionjournals()->expanded()->take(50)->offset($offset) ->orderBy('transaction_journals.date', 'DESC') ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') - ->get( - ['transaction_journals.*'] - ); + ->get(TransactionJournal::QUERYFIELDS); } @@ -140,13 +138,13 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate return $category->transactionjournals() ->after($start) ->before($end) - ->withRelevantData()->take(50)->offset($offset) + ->expanded() + ->take(50) + ->offset($offset) ->orderBy('transaction_journals.date', 'DESC') ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') - ->get( - ['transaction_journals.*'] - ); + ->get(TransactionJournal::QUERYFIELDS); }