PHP testing emptying out collection

I’m currently trying to write PHP tests using pest for a search feature within a chat component. The component works fine when being used in my test environment though i’m unable to get a certain test to pass. The objective is to be able to return multiple messages that meet a specific search term.

Here is the test itself in ChatSearchTest.php:

/** @test */
    public function the_component_can_return_multiple_search_results()
    {
        $messages_fixed_content = ChatMessage::factory(2)
        ->for($this->members[0], 'from')
        ->for($this->members[1], 'to')
        ->create([ 
            'content' => 'test123'
        ]);

        $messages_random_content = ChatMessage::factory(1)
        ->for($this->members[0], 'from')
        ->for($this->members[1], 'to')
        ->create();

        $messages = $messages_fixed_content->merge($messages_random_content);
         
        $chat_search = 'test123';
        
        $component = Livewire::test(ChatSearch::class, ['partnership' => $this->partnership])
            ->set('chat_search', $chat_search)
            ->call('getSearchResults', $chat_search);
            ->assertCount('messages', 2);
    }   

And the relevant code it’s testing in ChatSearch.php:

public function updatedChatSearch()
    {
        $this->getSearchResults();
    }

    public function getSearchResults()
    {
        $search_results = $this->getMessagesQuery()->get();
        $this->messages = $search_results;
        
        $this->have_results = true; 
    }

    protected function getMessagesQuery()
    {
        $query = $this->partnership
            ->chatMessages()
            ->with('from')
            ->with('shareable');
        if ($this->chat_search) {
            $query->search('content', $this->chat_search);
        }
        $query->latest();
        
        return $query;
    }

    public function goToMessage($message_id)
    {
        $this->emitUp('goToSearchResult', $message_id);
    }

The issue is that $this->messages returns an empty collection during the test, whereas on the actual testing environment, it works. If I dump out at the end of getSearchResults() it correctly shows $this->have_results as true though $this->messages returns an empty collection, as does $search_results.

less than or equal to in codeigniter using mysql not working

i have a simple query like below:

$backlogs=$_POST['backlogs'];

$this->db->select('*');
if(!empty($backlogs)) {
$this->db->where('backlogs >=', $backlogs-3);
$this->db->where('backlogs >=', $backlogs+3);
}
$query  =   $this->db->get('universities');

i want the query to fetch the values which are more than or equal to 3 values and less than or equal to, but i dont get the result as i wanted, for example if i give value 12, i need values from 9 to 15, but it gives me some random values like till 25 and all, can anyone please tell me how to fix this

Backup failed because The dump process failed with exitcode 2:Misuse of shell builtins:mysqldump: Got error: 2004: “Can’t create TCP/IP socket (10106)

I’m trying to create a database backup.
using spatie/laravel-backup LIB.

The backup using the Artisan command is working well, Which is (php artisan backup:run).
Also on Kernal schedule is working well.

The issue when I try to create an api to make backup.
The code of the API :-

Artisan::queue(‘backup:run’, [‘–only-db’ => true,’–disable-notifications’ => true ]);

or even I tried Call function instead of queue.
But also didn’t fixed the issue.
enter image description here

Inner workings of array_push and count

In PHP, for adding a value to (the end of) an array, there’s the array_push function.
But, would it behave like array_append from this code?

function array_append(&$arr,...$vals){
    foreach($vals as $val)
        $arr[count($arr)]=$val;
}

Also, would count behave like elem_quantity from this code?

function elem_quantity($a,$m=0){
    if(!is_array($a)) return 1;
    $o=0;
    foreach($a as $e)
        if($m)
            $o+=elem_quantity($a);
        else
            $o++;
    return $o;
}

Thanks for reaching out.

Edit: As @deceze have pointed out:

  1. (The previous) array_append wouldn’t work in some cases. Would this array_append behave like array_push?
function array_append(&$arr,...$vals){
    $i=0;
    foreach($arr as $k => $v)
        if(is_numeric($k)&&$k>$i) $i=$k;
    foreach($vals as $val)
        $arr[$i++]=$val;
}
  1. Also, elem_quantity should pass $m when it recursively calls itself, so instead of
$o+=elem_quantity($a);

there should be:

$o+=elem_quantity($a,$m);

or

$o+=elem_quantity($a,1);

php Symfony 4 Ajax issue

im learning Symfony and now trying to connect Ajax with Symfony.
I put Ajax between javascript block in twig and put really simple function in controller file to check whether it is working, but found out it’s not working.
Doesn’t show alert inside Ajax, and not showing dump($r) in console as well.

this is my Ajax script in twig file
”’

   {%block javascripts %}
 <script language = "javascript">
   
$(document).ready(function () {
    $("#customize").on("click", function (event) {
        $.ajax({
            url: "{{ 'test/ajax' }}",
            type: 'POST',
            async: true,
            dataType: 'json',
            data:{
                id:1,
                text: 'hello'
            }
        }).done(function(data) {
            alert('yes');
        }).fail(function() {
            alert('no');
        })
    });
});
 </script> 
{%endblock%}

”’

this is the Anker connected to Ajax.
”’

{{form_start(form)}}
    {{form_widget(form)}}
{{form_end(form)}}        
<a href="#" id="customize" name="customize" class="btn-basic">Customize</a>

”’

this is the controller file
”’

/**
* @Route("/test/ajax", name="ajax_edit")
*/
public function ajaxAction(Request $request){
  $r = $request->request->get('data');
  dump($r);
}

”’

I guess Anker is not responding even though I clicked it. but I don’t know how to fix this problem..

symfony/validator: how to validate string as int

I created a contoller in Symfony that will be handle API requests. I want to validate action request. Parameter ‘type’ of the request must be integer. There is controller action code:

public function store(ValidatorInterface $validator, Request $request): JsonResponse
{
    $collection = new Collection([
        'type' => [
            new AssertType('int'),
            new AssertRange(['min' => 1, 'max' => 2])
        ]
    ]);

    $errors = $validator->validate($request->request->all(), $collection);
    if ($errors->count()) {
        dd($errors);
    }

    return new JsonResponse('OK');
}

But when I tested this action via Postman, validation is failed with error “This value should be of type int.” event if I send response with int value:

my response

What is the right way to validate int param or string param as int in Symfony?

Codeigniter 4 Handle Request URI Segment If the URL is empty

I am using Codeigniter 4 framework and I have a function for getting the URI segment like

    $bahasa = $request->uri->getSegment(1);
    $url = $request->uri->getSegment(2);
    $content = $request->uri->getSegment(3);

the code is working if the URL most like:
http://localhost:8080/segment1/segment2/segment3
but if I put the URL like http://localhost:8080/segment1/ the code is an error, the error is
CodeIgniterHTTPExceptionsHTTPException Request URI segment is out of range: 2

Google: “Error 400: redirect_uri_mismatch”

Users in my website keep getting this error everytime they choose to sign in using google.
I have had a look at related public questions to find a solution, but nothing seems to work, because my code is slightly different.

Here is what the REGISTER page does in this case:

require_once __DIR__ . "/data_inc/google.php";
$loginURL = $gClient->createAuthUrl();
<a onclick="window.location = '<?=$loginURL?>'" class="oauth-container btn darken-4 white black-text" style="text-transform:none">
        <div class="left">
            <img style="margin-top:7px; margin-right:8px" alt="Google sign-in" 
                src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Google_%22G%22_Logo.svg/512px-Google_%22G%22_Logo.svg.png" />
        </div>
        With Google
    </a>

Here is the code which does the main part, which is google.php

session_start();
 require_once "/home/tonevrec/public_html/vendor/autoload.php";
 $gClient = new Google_Client();
 $gClient->setClientId("92382394890-324098239048239084id0234824.apps.googleusercontent.com");
 $gClient->setClientSecret("GNALER-l_wO1DJwbcjUNa02812l7KlS6p");
 $gClient->setApplicationName("Tonevre");
 $gClient->addScope(scope_or_scopes:"https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email");
 $gClient->setRedirectUri('https://tonevre.com');

Does anyone know what I should do; Download anything, write new code, or even remove something? If anybody needs more details, please send a message. Thank you for reading!

Laravel Nova Images Field callback Function outside

in the nova resource I can define an image field with a media library addon package like:

Images::make('Main image', 'media_main')
    ->setFileName(static function($originalFilename, $extension) {
         return md5($originalFilename) . '.' . $extension;
}),

How can I use a function from the resource so that I can use the function multiple times for more Images fields and don’t use duplicate code always for the same functionality.

For example:

public static function fileName($originalFilename, $extension) {
    return md5($originalFilename) . '.' . $extension;
}

So that in the fields section I can use multiple times:

Images::make('Main image', 'media_main')
    ->setFileName(self::fileName($originalFilename, $extension)),

The last call always results in an error message, because I can not grab the parameters. What I’m doing wrong? I think I have a misconception …

the simplest tool to manage “local” develoment with multiple projects with “sometimes” different languages? [closed]

i work with different projects (front-end “vuejs and other frameworks” and backend “for example laravel APIs projects”) some of them are old projects working with older versions of a specific language (php for example in case of laravel) and i found my self always struggling to make the project work (making sure i have the same version of the language the project is developed with. and config terminal to use that version of the language)… is there an easy way to manage this problem.. i have used nvm (node version manager) for node projects but sometimes forget to change the version of node and cause some problem.. what the best solution for local dev in genral ? i researched about docker and most of the resources is talking about deployment and deployment is not my concern because my servers environment is not always changing, but my local environment on the other hand is always changing (os changing.. distro hopping..) i want a clean way for this problem.
i want a lightweight dev env for any project i have that is easy to config and lives with the projct when i push projects to git for example so i can re genreate the env again when ever i clone the project again

How to make sure that OpCache is caching files of my website ? (Prestashop)

I am trying to use Opcache on my Prestashop Website, I installed it and it seems active (see here) , but I want to be sure that it’s actually caching the PhP scripts.

I have been looking into the configuration array that delivers some info about Opcache (see here) but I want to see exactly which files are cached (and possibly also where).

Also, is there a way to see the effect of Opcache on my website between: when activate vs deactivate ?

Thanks a lot

Changing the subscription status according to the order status in WooCoommerce

When the parent’s order is registered but no payment is made, the order status will be Pending Payment and the subscription status will be pending.

When the renewal order is created, the status of the order will be Pending Payment and the subscription status will be on-hold, But I want the subscription status to be pending.

How can I customize the subscription status according to the order status?

I am using the below code but the status is on-hold and not changing to pending

function change_order_and_subscription_status( $renewal_order, $subscription ) {
    $renewal_order->update_status('pending');
    $subscription->update_status('pending');
    return $renewal_order;
}
add_filter( 'wcs_renewal_order_created', 'change_order_and_subscription_status', 10, 2 );

Can you guide me?

EEROR: org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject

Java code:

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.Androtech.app.instagram.MainActivity;
import com.Androtech.app.instagram.R;
import com.Androtech.app.instagram.helper.SharedPrefrenceManger;
import com.Androtech.app.instagram.helper.URLS;
import com.Androtech.app.instagram.helper.VolleyHandler;
import com.Androtech.app.instagram.models.User;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class SignUpActivity extends AppCompatActivity {


    LinearLayout mLoginContainer;
    AnimationDrawable mAnimationDrawable;

    EditText email_et, username_et,password_et,password_confirm_et;
    Button  sign_up_btn;
    TextView go_to_login_btn;
    ProgressDialog mProgrssDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up);


        //Animation config
        mLoginContainer = (LinearLayout) findViewById(R.id.login_container);
        mAnimationDrawable = (AnimationDrawable) mLoginContainer.getBackground();
        mAnimationDrawable.setEnterFadeDuration(5000);
        mAnimationDrawable.setExitFadeDuration(2000);


        //login design varibales
        email_et = (EditText) findViewById(R.id.user_email);
        username_et = (EditText) findViewById(R.id.user_name);
        password_et = (EditText) findViewById(R.id.user_password);
        password_confirm_et = (EditText) findViewById(R.id.user_password_confirm);
        sign_up_btn =  (Button) findViewById(R.id.sign_up_btn);
        go_to_login_btn = (TextView) findViewById(R.id.go_to_login_btn);
        mProgrssDialog = new ProgressDialog(this);


        sign_up_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                register();
            }
        });

        go_to_login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                startActivity(new Intent(SignUpActivity.this,LoginActivity.class));
            }
        });


    }


    private void register(){


        mProgrssDialog.setTitle("Creating your account");
        mProgrssDialog.setMessage("Please wait....");
        mProgrssDialog.show();

        final String email = email_et.getText().toString();
        final String username = username_et.getText().toString();
        final String password = password_et.getText().toString();
        String password_confirm = password_confirm_et.getText().toString();


        if(!email.contains("@")){
            email_et.setError("This is not a valid email");
            email_et.requestFocus();
            mProgrssDialog.dismiss();
            return;
        }
        if(TextUtils.isEmpty(username)){
            username_et.setError("Please fill in this field");
            username_et.requestFocus();
            mProgrssDialog.dismiss();
            return;
        }

        if(TextUtils.isEmpty(password)){
            password_et.setError("Please fill in this field");
            password_et.requestFocus();
            mProgrssDialog.dismiss();
            return;
        }

        if(TextUtils.isEmpty(password_confirm)){
            password_confirm_et.setError("Please fill in this field");
            password_confirm_et.requestFocus();
            mProgrssDialog.dismiss();
            return;
        }

        if(!password.equals(password_confirm)){
            password_et.setError("Password charachters don't match!");
            password_et.requestFocus();
            mProgrssDialog.dismiss();
            return;

        }


        StringRequest stringRequest = new StringRequest(Request.Method.POST, URLS.sign_up_api,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONObject jsonObject = new JSONObject(response);

                            if(!jsonObject.getBoolean("error")){
                                mProgrssDialog.dismiss();

                                JSONObject jsonObjectUser =  jsonObject.getJSONObject("user");

                                User user = new User(jsonObjectUser.getInt("id"),jsonObjectUser.getString("email"),jsonObjectUser.getString("username")
                                        ,jsonObjectUser.getString("image"));


                                //store user data inside sharedprefrences
                                SharedPrefrenceManger.getInstance(getApplicationContext()).storeUserData(user);


                                //let user in
                                finish();
                                startActivity(new Intent(SignUpActivity.this,MainActivity.class));

                            }else{

                                Toast.makeText(SignUpActivity.this,jsonObject.getString("message"),Toast.LENGTH_LONG).show();
                            }


                        }catch (JSONException e){
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(SignUpActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                        mProgrssDialog.dismiss();
                    }
                }


        ){

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> authenticationVariables = new HashMap<>();
                authenticationVariables.put("email",email);
                authenticationVariables.put("username",username);
                authenticationVariables.put("password",password);
                return  authenticationVariables;
            }
        };//end of string Request

        VolleyHandler.getInstance(getApplicationContext()).addRequetToQueue(stringRequest);

    }


    @Override
    protected void onResume() {
        super.onResume();

        if(mAnimationDrawable != null && !mAnimationDrawable.isRunning()){
            mAnimationDrawable.start();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();

        if(mAnimationDrawable != null && mAnimationDrawable.isRunning()){
            mAnimationDrawable.stop();
        }
    }



    @Override
    protected void onStart() {
        super.onStart();

        boolean isUserLoggedIn = SharedPrefrenceManger.getInstance(getApplicationContext()).isUserLogggedIn();

        if (isUserLoggedIn) {
            startActivity(new Intent(SignUpActivity.this, MainActivity.class));
        } else {

        }
    }




}

Error

W/System.err: org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject
W/System.err:     at org.json.JSON.typeMismatch(JSON.java:111)
W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:163)
        at org.json.JSONObject.<init>(JSONObject.java:176)
        at com.Androtech.app.instagram.authentication.SignUpActivity$3.onResponse(SignUpActivity.java:142)
        at com.Androtech.app.instagram.authentication.SignUpActivity$3.onResponse(SignUpActivity.java:137)
W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:78)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6524)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:451)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888)

I am trying to implement a sign-up activity but the following error is given when signing up in the emulator. I have seen a solution that proposes me to edit the code as below.

JSONArray jsonarray = new JSONArray(strResponse);
for(int i=0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);

I however do not know how to implement the proposed code together with my code:

if(!jsonObject.getBoolean("error")){
                                mProgrssDialog.dismiss();

                                JSONObject jsonObjectUser =  jsonObject.getJSONObject("user");

                                User user = new User(jsonObjectUser.getInt("id"),jsonObjectUser.getString("email"),jsonObjectUser.getString("username")
                                        ,jsonObjectUser.getString("image"));

Kindly help me figure out the code.

Laravel [9] html sometimes does not render properly

Actually this problem i noticed a have few weeks ago.

I using Docker for Windows and laravel running on docker.

I tried using local and remote database, but nothing has changed.

What is the problem? I cant detect anything.

This page is look like good rendered. But if i change page or reload, any place is look like this in page. I tried some things but didnt work.

This is a normal page

Not every time, just sometimes :/

This is wrong page 1

This is wrong page 2

list.blade.php

@extends('admin.layouts.master')

@section('title', 'Tüm Siparişler')
@section('content')

    <div class="row">
        <div class="col-12">
            <div class="card">
                <div class="card-body">
                    <div class="row mb-2">
                        <div class="col-sm-4">
                            <div class="search-box me-2 mb-2 d-inline-block">
                                <div class="position-relative">
                                    <form method="GET" action="{{ route('admin_order_status', $status) }}">
                                        <input type="text" name="search" class="form-control"
                                            value="{{ $search }}" placeholder="Arama...">
                                        <i class="bx bx-search-alt search-icon"></i>
                                    </form>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="table-responsive">
                        <table class="table align-middle table-nowrap table-check">
                            <thead class="table-light">
                                <tr>
                                    <th style="width: 20px;" class="align-middle">
                                        <div class="form-check font-size-16">
                                            <input class="form-check-input" type="checkbox" id="checkAll">
                                            <label class="form-check-label" for="checkAll"></label>
                                        </div>
                                    </th>
                                    <th class="align-middle">ID</th>
                                    <th class="align-middle">Ürün</th>
                                    <th class="align-middle">Müşteri</th>
                                    <th class="align-middle">Fiyat</th>
                                    <th class="align-middle">Sonraki ödeme tarihi</th>
                                    <th class="align-middle">Durum</th>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach ($orders as $item)
                                    <tr>
                                        <td>
                                            <div class="form-check font-size-16">
                                                <input class="form-check-input" type="checkbox"
                                                    id="orderidcheck{{ $item->order_id }}">
                                                <label class="form-check-label"
                                                    for="orderidcheck{{ $item->order_id }}"></label>
                                            </div>
                                        </td>
                                        <td>
                                            <a href="{{ route('admin_order_view', $item->order_id) }}"
                                                class="text-body fw-bold">
                                                {{ $item->order_id }}
                                            </a>
                                        </td>
                                        <td>
                                            <a href="{{ route('admin_order_view', $item->order_id) }}"
                                                class="text-body fw-bold">
                                                {{-- @lang("admin/orders.type.{$item->data->product_name}") --}}
                                                {{ $item->data->product_name }}
                                            </a>
                                        </td>
                                        <td>
                                            <a href="{{ route('admin_users_summary', $item->user_id) }}">
                                                {{ $item->first_name }} {{ $item->last_name }}
                                            </a>
                                        </td>
                                        <td>
                                            {{ $item->amount }} ₺
                                        </td>
                                        <td class="fw-bold">
                                            @if ($item->next_paid_at)
                                                {{ CarbonCarbon::parse($item->next_paid_at) }}
                                            @else
                                                -
                                            @endif
                                        </td>
                                        <td>
                                            <span
                                                class='badge badge-pill bg-{{ config("enums.order_status_color.$item->status") }} font-size-12'>
                                                @lang("admin/orders.$item->status")
                                            </span>
                                        </td>
                                    </tr>
                                @endforeach
                            </tbody>
                        </table>
                    </div>
                    {!! $orders->withQueryString()->links() !!}
                </div>
            </div>
        </div>
    </div>



@endsection

Controller.php

class OrdersController extends Controller
{

    public function indexByStatus(Request $request, string $status = 'all')
    {

        $search = $request->get('search');

        $orders = Order::query();
        $orders = $orders->join('users', 'users.id', '=', 'orders.user_id');

        $orders = $orders->select([
            'users.id as user_id',
            'users.first_name',
            'users.last_name',
            'orders.id as order_id',
            'orders.amount',
            'orders.data',
            'orders.payment_method',
            'orders.invoice_id',
            'orders.status',
            'orders.next_paid_at',
        ]);

        if ($search) {
            if ($status != 'all') {
                $orders->where('orders.status', $status);
            }
            $orders->where(function ($q) use ($search) {
                return
                    $q->orWhere('users.first_name', 'LIKE', "%$search%")
                    ->orWhere('users.last_name', 'LIKE', "%$search%")
                    ->orWhere('orders.data', 'LIKE', "%$search%");
            });
        } else {
            if ($status != 'all') {
                $orders->where('orders.status', $status);
            }
        }

        $orders = $orders->orderByDesc('orders.created_at');
        $orders = $orders->paginate(10);

        return view(
            'admin.orders.allorders',
            [
                'orders' => $orders,
                'search' => $search,
                'status' => $status,
            ]
        );
    }
}

Model.php

class Order extends Model
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'status',
        'payment_method',
        'billing_period',
        'data',
        'user_id',
        'invoice_id',
        'amount',
        'next_paid_at',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'data' => 'object',
        'next_paid_at' => 'timestamp',
        'created_at' => 'timestamp',
        'updated_at' => 'timestamp'
    ];

    public function user()
    {
        return $this->hasOne(User::class, 'id', 'user_id');
    }
}