PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.2.3-beta1
Presto Player v2.2.3-beta1
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Support / HasOneRelationship.php
presto-player / inc / Support Last commit date
Block.php 2 years ago BlockFinder.php 5 years ago DynamicData.php 5 years ago HasOneRelationship.php 5 years ago Integration.php 5 years ago Utility.php 4 years ago
HasOneRelationship.php
80 lines
1 <?php
2
3 namespace PrestoPlayer\Support;
4
5 class HasOneRelationship
6 {
7 protected $classname, $parent_model, $parent_field;
8
9 /**
10 * Construct
11 *
12 * @param string $classname
13 * @param \PrestoPlayer\Models\Model $parent_model
14 */
15 public function __construct($classname, $parent_model, $parent_field)
16 {
17 $this->classname = $classname;
18 $this->parent_model = $parent_model;
19 $this->parent_field = $parent_field;
20 }
21
22 public function getRelationshipClass()
23 {
24 return $this->classname;
25 }
26
27 public function getParentField()
28 {
29 return $this->parent_field;
30 }
31
32 public function getRelationshipTable()
33 {
34 return (new $this->classname)->getTableName();
35 }
36
37 /**
38 * Save the model with the relationship
39 *
40 * @param array $arguments
41 * @return \PrestoPlayer\Models\Model
42 */
43 public function save($arguments)
44 {
45 // create the item and save as
46 $saved_id = (new $this->classname())->create($arguments);
47
48 // update or create parent model
49 if ($this->parent_model->id) {
50 return $this->parent_model->update([
51 $this->parent_field => (int) $saved_id
52 ]);
53 }
54
55 return new \WP_Error('unsaved', 'Please save the model before adding the relationship.');
56 }
57
58 public function update($arguments)
59 {
60 if (!$this->parent_field) {
61 return new \WP_Error('unsaved', 'Please create the relationship before updating it.');
62 }
63
64 $item_class = (new $this->classname());
65 $item = $this->parent_model->{$this->parent_field};
66
67 if (is_int($item)) {
68 $item = $item_class->get($item);
69 } else if (is_object($item)) {
70 $item = $item_class->set($item);
71 }
72
73 if (empty($item)) {
74 return new \WP_Error('unsaved', 'Please create the relationship before updating it.');
75 }
76
77 return $item->update($arguments);
78 }
79 }
80